<?php
require __DIR__ . '/src/Autoloader.php';

\Gestoreasy\Autoloader::register();

use Gestoreasy\Core\Config\Env;

Env::load(__DIR__.'/.env');

// Configuração de logging de erros para facilitar diagnóstico
// Cria diretório de logs se necessário e força logging de erros e exceções não tratadas
try {
    $logDir = __DIR__ . '/storage/tmp';
    if (!is_dir($logDir)) { @mkdir($logDir, 0777, true); }
    @ini_set('log_errors', '1');
    @ini_set('error_log', $logDir . '/php_error.log');
    // Em ambiente local, habilitar relatório completo de erros, mas NÃO exibir na resposta
    $appEnv = getenv('APP_ENV') ?: 'local';
    if ($appEnv === 'local') {
        @error_reporting(E_ALL);
        // Não alterar display_errors aqui para não poluir respostas JSON/HTML
        @ini_set('display_errors', '0');
        @ini_set('html_errors', '0');
    }
    // Capturar exceções não tratadas
    set_exception_handler(function ($e) {
        try {
            error_log('[UnhandledException] ' . get_class($e) . ': ' . $e->getMessage() . "\n" . $e->getTraceAsString());
        } catch (\Throwable $ignore) {}
    });
    // Capturar erros fatais na finalização
    register_shutdown_function(function () {
        $err = error_get_last();
        if ($err && in_array($err['type'], [E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR])) {
            $msg = sprintf('[FatalError] %s in %s:%d', $err['message'] ?? '', $err['file'] ?? '', $err['line'] ?? 0);
            try { error_log($msg); } catch (\Throwable $ignore) {}
        }
    });
} catch (\Throwable $e) {
    // Ignorar falhas na configuração de logging para não quebrar a aplicação
}