"""Shared logging setup and env audit for ci_gate and nightly entry points."""

from __future__ import annotations

import logging
import os
import sys

from scripts.helpers._config import Config

_LOG_FORMAT = "%(levelname)-5s %(asctime)s.%(msecs)03d [%(filename)s:%(lineno)d] %(message)s"
_LOG_DATE_FORMAT = "%m-%d %H:%M:%S"


def setup_logger(name: str = "ci_gate") -> logging.Logger:
    logging.basicConfig(
        level=logging.INFO,
        format=_LOG_FORMAT,
        datefmt=_LOG_DATE_FORMAT,
        stream=sys.stderr,
    )
    return logging.getLogger(name)


def log_env_audit(cfg: Config, logger: logging.Logger) -> None:
    logger.info("=== Environment audit ===")
    _log_env_var(logger, "MSMODELING_TEST_MAP_PATH", cfg.test_map_path)
    _log_env_var(logger, "MSMODELING_TEST_BASE_BRANCH", cfg.base_branch)
    _log_env_var(logger, "MSMODELING_TEST_LINE_THRESHOLD", cfg.line_threshold)
    _log_env_var(logger, "MSMODELING_TEST_BRANCH_THRESHOLD", cfg.branch_threshold)
    _log_env_var(logger, "MSMODELING_BENCHMARK_PARALLEL", cfg.benchmark_parallel)
    _log_env_var(
        logger,
        "FEISHU_WEBHOOK_URL",
        "(configured)" if cfg.feishu_webhook_url else "(not set)",
    )
    _log_env_var(logger, "MSMODELING_CACHE", cfg.msmodeling_cache)
    _log_env_var(logger, "MSMODELING_TEST_WEIGHTS_PRUNE", cfg.weights_prune)
    _log_env_var(logger, "MSMODELING_OFFLINE", os.environ.get("MSMODELING_OFFLINE", "(not set)"))
    logger.info("==========================")


def _log_env_var(logger: logging.Logger, key: str, value: object) -> None:
    source = "env" if key in os.environ else "default"
    logger.info("  %s = %s  [%s]", key, value, source)