<?php
/**
 * Simple Logger Class for CodePress CMS
 * 
 * Provides structured logging with log levels and file output.
 * 
 * @package CodePress
 * @version 1.0.0
 */

class Logger {
    const DEBUG = 'DEBUG';
    const INFO = 'INFO';
    const WARNING = 'WARNING';
    const ERROR = 'ERROR';
    
    private static $logFile = null;
    private static $debugMode = false;
    
    /**
     * Initialize logger
     * 
     * @param string $logFile Path to log file
     * @param bool $debugMode Enable debug logging
     */
    public static function init($logFile = null, $debugMode = false) {
        if ($logFile === null) {
            $logFile = __DIR__ . '/../../logs/codepress.log';
        }
        
        self::$logFile = $logFile;
        self::$debugMode = $debugMode;
        
        // Ensure log directory exists
        $logDir = dirname(self::$logFile);
        if (!is_dir($logDir)) {
            @mkdir($logDir, 0755, true);
        }
    }
    
    /**
     * Log debug message (only in debug mode)
     * 
     * @param string $message Message to log
     * @param array $context Additional context
     */
    public static function debug($message, $context = []) {
        if (self::$debugMode) {
            self::write(self::DEBUG, $message, $context);
        }
    }
    
    /**
     * Log info message
     * 
     * @param string $message Message to log
     * @param array $context Additional context
     */
    public static function info($message, $context = []) {
        self::write(self::INFO, $message, $context);
    }
    
    /**
     * Log warning message
     * 
     * @param string $message Message to log
     * @param array $context Additional context
     */
    public static function warning($message, $context = []) {
        self::write(self::WARNING, $message, $context);
    }
    
    /**
     * Log error message
     * 
     * @param string $message Message to log
     * @param array $context Additional context
     */
    public static function error($message, $context = []) {
        self::write(self::ERROR, $message, $context);
    }
    
    /**
     * Write log entry to file
     * 
     * @param string $level Log level
     * @param string $message Message to log
     * @param array $context Additional context
     */
    private static function write($level, $message, $context = []) {
        if (self::$logFile === null) {
            self::init();
        }
        
        $timestamp = date('Y-m-d H:i:s');
        $contextStr = !empty($context) ? ' ' . json_encode($context) : '';
        $line = "[$timestamp] [$level] $message$contextStr\n";
        
        // Write to file with error suppression (graceful degradation)
        @file_put_contents(self::$logFile, $line, FILE_APPEND | LOCK_EX);
    }
    
    /**
     * Get log file path
     * 
     * @return string Log file path
     */
    public static function getLogFile() {
        return self::$logFile;
    }
    
    /**
     * Clear log file
     * 
     * @return bool Success status
     */
    public static function clear() {
        if (self::$logFile && file_exists(self::$logFile)) {
            return @unlink(self::$logFile);
        }
        return false;
    }
    
    /**
     * Get last N lines from log file
     * 
     * @param int $lines Number of lines to retrieve
     * @return array Log lines
     */
    public static function tail($lines = 100) {
        if (!self::$logFile || !file_exists(self::$logFile)) {
            return [];
        }
        
        $file = @file(self::$logFile);
        if ($file === false) {
            return [];
        }
        
        return array_slice($file, -$lines);
    }
}