"""
중앙 로깅 설정
모든 모듈이 공통으로 사용하는 로깅 시스템
"""

import logging
import logging.handlers
from datetime import datetime
from pathlib import Path

# 로그 디렉토리 생성
LOG_DIR = Path("/tmp/cokacdir/logs")
LOG_DIR.mkdir(parents=True, exist_ok=True)

# 로그 파일명 (날짜별)
LOG_FILE = LOG_DIR / f"cokacdir-{datetime.now().strftime('%Y-%m-%d')}.log"


# 로깅 설정
def setup_logging(name: str) -> logging.Logger:
    """
    로거 생성

    Args:
        name: 모듈명 (예: "red_team.code_reviewer")

    Returns:
        설정된 로거
    """
    try:
        logger = logging.getLogger(name)
        logger.setLevel(logging.DEBUG)

        # 이미 핸들러가 있으면 중복 추가 방지
        if logger.handlers:
            return logger

        # 파일 핸들러 (모든 로그)
        try:
            file_handler = logging.handlers.RotatingFileHandler(
                LOG_FILE, maxBytes=10 * 1024 * 1024, backupCount=5  # 10MB
            )
            file_handler.setLevel(logging.DEBUG)
            file_formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
            file_handler.setFormatter(file_formatter)
            logger.addHandler(file_handler)
        except Exception as e:
            print(f"Warning: Failed to create file handler: {e}")

        # 콘솔 핸들러 (에러만)
        try:
            console_handler = logging.StreamHandler()
            console_handler.setLevel(logging.ERROR)
            console_formatter = logging.Formatter("%(levelname)s - %(name)s - %(message)s")
            console_handler.setFormatter(console_formatter)
            logger.addHandler(console_handler)
        except Exception as e:
            print(f"Warning: Failed to create console handler: {e}")

        # Sentry 핸들러 추가 (선택사항)
        # Note: Sentry integration is handled in sentry_config.py
        # This logger will automatically work with Sentry if initialized

        return logger

    except Exception as e:
        print(f"Error setting up logging: {e}")
        # Return basic logger as fallback
        return logging.getLogger(name)


def log_execution(logger: logging.Logger, action: str, details: dict = None):
    """
    실행 로그 기록

    Args:
        logger: 로거
        action: 작업명
        details: 상세 정보
    """
    if details:
        logger.info(f"{action} - {details}")
    else:
        logger.info(action)


def log_error(logger: logging.Logger, error: Exception, context: dict = None):
    """
    에러 로그 기록

    Args:
        logger: 로거
        error: 에러 객체
        context: 컨텍스트 정보
    """
    if context:
        logger.error(f"{type(error).__name__}: {error} - Context: {context}")
    else:
        logger.error(f"{type(error).__name__}: {error}")
