"""Logging setup: daily log file (DEBUG) + console (INFO) with 7-day auto-cleanup."""

import logging
import os
from datetime import datetime, timedelta
from pathlib import Path

from src.config.settings import PROJECT_ROOT

LOGS_DIR = PROJECT_ROOT / "logs"
LOG_RETENTION_DAYS = 7


def setup_logger(name: str = "seo_optimizer") -> logging.Logger:
    """Configure and return the application logger."""
    LOGS_DIR.mkdir(exist_ok=True)

    logger = logging.getLogger(name)
    if logger.handlers:
        return logger

    logger.setLevel(logging.DEBUG)

    # Daily log file
    today = datetime.now().strftime("%Y%m%d")
    log_file = LOGS_DIR / f"daily_log_{today}.txt"

    file_handler = logging.FileHandler(log_file, encoding="utf-8")
    file_handler.setLevel(logging.DEBUG)

    console_handler = logging.StreamHandler()
    console_handler.setLevel(logging.INFO)

    formatter = logging.Formatter(
        "%(asctime)s [%(levelname)s] %(name)s: %(message)s",
        datefmt="%Y-%m-%d %H:%M:%S",
    )
    file_handler.setFormatter(formatter)
    console_handler.setFormatter(formatter)

    logger.addHandler(file_handler)
    logger.addHandler(console_handler)

    return logger


def cleanup_old_logs() -> int:
    """Delete log files older than LOG_RETENTION_DAYS. Returns count of deleted files."""
    if not LOGS_DIR.exists():
        return 0

    cutoff = datetime.now() - timedelta(days=LOG_RETENTION_DAYS)
    deleted = 0

    for log_file in LOGS_DIR.glob("daily_log_*.txt"):
        # Parse date from filename: daily_log_YYYYMMDD.txt
        try:
            date_str = log_file.stem.replace("daily_log_", "")
            file_date = datetime.strptime(date_str, "%Y%m%d")
            if file_date < cutoff:
                os.remove(log_file)
                deleted += 1
        except (ValueError, OSError):
            continue

    return deleted
