<?php
require_once __DIR__ . '/config.php';

// ============
// Configurações Padrão de Log (Caso não existam no config.php)
// ============
if (!defined('APP_DEBUG')) define('APP_DEBUG', false);
if (!defined('LOG_MAX_BYTES')) define('LOG_MAX_BYTES', 5 * 1024 * 1024); // 5MB
if (!defined('LOG_BACKUP_SUFFIX')) define('LOG_BACKUP_SUFFIX', '.old');

// ============
// Error Mode
// ============
if (APP_DEBUG) {
    error_reporting(E_ALL);
    ini_set('display_errors', '1');
    ini_set('display_startup_errors', '1');
    ini_set('log_errors', '1'); // Ativa log de erros mesmo em debug
} else {
    // Produção: Não imprime erros para não quebrar o JSON do App
    error_reporting(E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);
    ini_set('display_errors', '0');
    ini_set('display_startup_errors', '0');
    ini_set('log_errors', '1'); // Garante que erros sejam gravados no log do servidor
}

// ============
// Log Helpers
// ============

/**
 * Rotaciona o arquivo de log se ele exceder o tamanho máximo definido.
 */
function app_rotate_log_if_needed(string $filePath): void {
    if (!file_exists($filePath) || !is_file($filePath)) return;

    $size = @filesize($filePath);
    if ($size === false || $size <= LOG_MAX_BYTES) return;

    $backup = $filePath . LOG_BACKUP_SUFFIX;

    // Remove backup antigo e renomeia o atual
    if (file_exists($backup)) {
        @unlink($backup);
    }
    @rename($filePath, $backup);
}

/**
 * Adiciona uma linha ao log, garantindo a rotação e a criação da pasta.
 */
function app_log_append(string $filePath, string $line): void {
    // Garante que o diretório do log existe
    $dir = dirname($filePath);
    if (!is_dir($dir)) {
        @mkdir($dir, 0755, true);
    }

    app_rotate_log_if_needed($filePath);

    // Adiciona data/hora automaticamente se não houver na linha
    $timestamp = date('Y-m-d H:i:s');
    $formattedLine = "[{$timestamp}] " . trim($line) . PHP_EOL;

    @file_put_contents($filePath, $formattedLine, FILE_APPEND | LOCK_EX);
}