"""Logging configuration module for application-wide tracing."""

import os
import sys
from datetime import datetime


def init_logger(log_dir: str = "logs", level: str = "INFO", log_to_console: bool = True) -> None:
    """Initialize the logger with both file and console handlers.

    Args:
        log_dir: Directory path for log files
        level: Logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
        log_to_console: Whether to print logs to console/screen
    """
    from loguru import logger

    # Remove default handler to avoid duplicate logs
    logger.remove()

    # Configure colorized standard output logging if enabled
    if log_to_console:
        logger.add(
            sink=sys.stdout,
            level=level,
            format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {file}:{line} | {function} | {message}",
            colorize=True,
        )

    # Try to configure file-based logging (skip if permission denied)
    try:
        # Ensure the logging directory exists
        os.makedirs(log_dir, exist_ok=True)

        # Generate filename based on the current timestamp
        # Use dashes instead of colons for Windows compatibility
        current_ts = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
        log_filename = f"{current_ts}.log"
        log_filepath = os.path.join(log_dir, log_filename)

        # Configure file-based logging with rotation and compression
        logger.add(
            log_filepath,
            level=level,
            rotation="00:00",
            retention="7 days",
            compression="zip",
            encoding="utf-8",
            format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {file}:{line} | {function} | {message}",
        )
    except Exception as e:
        logger.error(f"Error configuring file logging: {e}")
