#!/usr/bin/env python3
"""
Logging utilities for the build system
Provides consistent logging with Typer output and file logging
"""

import typer
from pathlib import Path
from datetime import datetime

# Global log file handle
_log_file = None


def _ensure_log_file():
    """Ensure log file is created with timestamp"""
    global _log_file
    if _log_file is None:
        from .paths import get_package_root

        # Create logs directory if it doesn't exist
        log_dir = get_package_root() / "logs"
        log_dir.mkdir(exist_ok=True)

        # Create log file with timestamp
        timestamp = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
        log_file_path = log_dir / f"build_{timestamp}.log"
        # Open with UTF-8 encoding to handle any characters
        _log_file = open(log_file_path, "w", encoding="utf-8")
        _log_file.write(
            f"BrowserOS Build Log - Started at {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n"
        )
        _log_file.write("=" * 80 + "\n\n")
    return _log_file


def _log_to_file(message: str):
    """Write message to log file with timestamp"""
    log_file = _ensure_log_file()
    timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    log_file.write(f"[{timestamp}] {message}\n")
    log_file.flush()


def log_info(message: str):
    """Print info message using Typer"""
    typer.echo(message)
    _log_to_file(f"INFO: {message}")


def log_warning(message: str):
    """Print warning message with color"""
    typer.secho(f"⚠️  {message}", fg=typer.colors.YELLOW)
    _log_to_file(f"WARNING: {message}")


def log_error(message: str):
    """Print error message to stderr with color"""
    typer.secho(f"❌ {message}", fg=typer.colors.RED, err=True)
    _log_to_file(f"ERROR: {message}")


def log_success(message: str):
    """Print success message with color"""
    typer.secho(f"✅ {message}", fg=typer.colors.GREEN)
    _log_to_file(f"SUCCESS: {message}")


def log_debug(message: str, enabled: bool = False):
    """Print debug message if enabled"""
    if enabled:
        typer.secho(f"🔍 {message}", fg=typer.colors.BLUE, dim=True)
        _log_to_file(f"DEBUG: {message}")


def close_log_file():
    """Close the log file if it's open"""
    global _log_file
    if _log_file:
        _log_file.close()
        _log_file = None


# Export all logging functions
__all__ = [
    'log_info',
    'log_warning',
    'log_error',
    'log_success',
    'log_debug',
    'close_log_file',
    '_log_to_file',  # Internal use by utils.run_command
]