"""پیکربندی لاگ‌گیری ساخت‌یافته (structured logging).

از logging استاندارد پایتون با فرمت JSON-friendly استفاده می‌کنیم تا در
production قابل جمع‌آوری توسط ابزارهای log aggregation باشد.
"""
from __future__ import annotations

import logging
import sys
from typing import Any

from app.core.config import settings

_configured = False


class _KeyValueFormatter(logging.Formatter):
    """فرمت ساده key=value برای خوانایی و پردازش ماشینی."""

    def format(self, record: logging.LogRecord) -> str:
        base: dict[str, Any] = {
            "level": record.levelname,
            "logger": record.name,
            "service": settings.service_name,
            "msg": record.getMessage(),
        }
        if record.exc_info:
            base["exc"] = self.formatException(record.exc_info)
        # فیلدهای اضافی که با extra ارسال شده‌اند
        for key, value in record.__dict__.items():
            if key in ("args", "msg", "levelname", "name", "exc_info", "exc_text",
                       "stack_info", "created", "msecs", "relativeCreated", "levelno",
                       "pathname", "filename", "module", "funcName", "lineno",
                       "processName", "process", "threadName", "thread", "taskName"):
                continue
            base.setdefault(key, value)
        return " ".join(f"{k}={v!r}" for k, v in base.items())


def configure_logging() -> None:
    """پیکربندی سراسری لاگ‌گیری (idempotent)."""
    global _configured
    if _configured:
        return

    handler = logging.StreamHandler(sys.stdout)
    handler.setFormatter(_KeyValueFormatter())

    root = logging.getLogger()
    root.handlers.clear()
    root.addHandler(handler)
    root.setLevel(settings.log_level.upper())

    # کاهش نویز لاگ کتابخانه‌های پرحرف
    logging.getLogger("uvicorn.access").setLevel(logging.WARNING)
    _configured = True


def get_logger(name: str) -> logging.Logger:
    configure_logging()
    return logging.getLogger(name)
