#!/usr/bin/env python3
"""
공통 로거 모듈
Usage: from utils.logger import get_logger
       logger = get_logger(__name__)
"""

import logging
import os
from logging.handlers import RotatingFileHandler
from pathlib import Path

_WORKSPACE_ROOT = os.environ.get("WORKSPACE_ROOT", "/home/jay/workspace")
LOG_FILE = Path(_WORKSPACE_ROOT) / "memory" / "logs" / "app.log"
LOG_FORMAT = "[%(asctime)s] [%(levelname)s] [%(name)s] %(message)s"
DATE_FORMAT = "%Y-%m-%d %H:%M:%S"


def get_logger(name: str, level: int = logging.DEBUG) -> logging.Logger:
    """
    로거 객체를 생성하고 반환합니다.

    Args:
        name: 로거 이름 (보통 __name__ 사용)
        level: 로그 레벨 (기본값: logging.DEBUG)

    Returns:
        logging.Logger: 설정된 로거 객체
    """
    logger = logging.getLogger(name)

    # 이미 핸들러가 등록된 경우 중복 추가 방지
    if logger.handlers:
        return logger

    logger.setLevel(level)

    # 로그 포맷 설정
    formatter = logging.Formatter(LOG_FORMAT, datefmt=DATE_FORMAT)

    # 콘솔 핸들러 (StreamHandler)
    console_handler = logging.StreamHandler()
    console_handler.setLevel(level)
    console_handler.setFormatter(formatter)
    logger.addHandler(console_handler)

    # 로그 디렉토리 자동 생성
    LOG_FILE.parent.mkdir(parents=True, exist_ok=True)

    # 파일 핸들러 (RotatingFileHandler)
    file_handler = RotatingFileHandler(LOG_FILE, maxBytes=10 * 1024 * 1024, backupCount=5)  # 10MB
    file_handler.setLevel(level)
    file_handler.setFormatter(formatter)
    logger.addHandler(file_handler)

    return logger
