"""
Sistema de logging
"""
import logging
import sys
from datetime import datetime
from pathlib import Path
from typing import Optional


class ChatbotLogger:
    """
    Logger customizado para o chatbot
    """

    def __init__(self, name: str = "chatbot", log_level: str = "INFO"):
        self.logger = logging.getLogger(name)
        self.logger.setLevel(getattr(logging, log_level.upper()))

        # Evitar handlers duplicados
        if self.logger.handlers:
            return

        # Formato
        formatter = logging.Formatter(
            '%(asctime)s | %(levelname)-8s | %(name)s | %(message)s',
            datefmt='%Y-%m-%d %H:%M:%S'
        )

        # Console handler
        console_handler = logging.StreamHandler(sys.stdout)
        console_handler.setFormatter(formatter)
        self.logger.addHandler(console_handler)

        # File handler
        log_dir = Path("logs")
        log_dir.mkdir(exist_ok=True)
        file_handler = logging.FileHandler(
            log_dir / f"chatbot_{datetime.now().strftime('%Y%m%d')}.log",
            encoding='utf-8'
        )
        file_handler.setFormatter(formatter)
        self.logger.addHandler(file_handler)

    def debug(self, message: str, extra: Optional[dict] = None):
        self.logger.debug(message, extra=extra)

    def info(self, message: str, extra: Optional[dict] = None):
        self.logger.info(message, extra=extra)

    def warning(self, message: str, extra: Optional[dict] = None):
        self.logger.warning(message, extra=extra)

    def error(self, message: str, extra: Optional[dict] = None):
        self.logger.error(message, extra=extra)

    def critical(self, message: str, extra: Optional[dict] = None):
        self.logger.critical(message, extra=extra)

    def log_conversation(self, user_id: str, message: str, response: str, metadata: Optional[dict] = None):
        """Log específico para conversas"""
        extra = {
            "user_id": user_id,
            "message_length": len(message),
            "response_length": len(response),
            **(metadata or {})
        }
        self.info(f"CONVERSATION | User: {user_id} | Msg: {message[:50]}... | Resp: {response[:50]}...", extra=extra)


# Instância global
logger = ChatbotLogger()