<?php
/**
 * env_loader.php — Cargador centralizado de variables de entorno
 * Sprint 1: Reescrito con cache estática para no leer el archivo en cada llamada
 * 
 * Uso:
 *   require_once __DIR__ . '/env_loader.php';   // (o ruta relativa)
 *   $config = env();                             // Retorna array completo
 *   $dbHost = env('DB_HOST');                    // Retorna un valor
 *   $debug  = env('APP_DEBUG', false);           // Valor por defecto
 */

function env($key = null, $default = null)
{
    static $config = null;

    if ($config === null) {
        $envPath = null;
        $searchPaths = [
            __DIR__ . '/.env',
            dirname(__DIR__) . '/.env',
            dirname(dirname(__DIR__)) . '/.env',
            dirname(dirname(dirname(__DIR__))) . '/.env',
        ];

        foreach ($searchPaths as $path) {
            if (file_exists($path)) {
                $envPath = $path;
                break;
            }
        }

        if ($envPath === null) {
            error_log('[env_loader] ERROR: No se encontró archivo .env');
            $config = [];
            return $default;
        }

        $config = parse_ini_file($envPath, false, INI_SCANNER_RAW);

        if ($config === false) {
            error_log('[env_loader] ERROR: No se pudo parsear .env en: ' . $envPath);
            $config = [];
            return $default;
        }
    }

    if ($key === null) {
        return $config;
    }

    // Sprint 10C: validar que credenciales críticas estén presentes
    static $validated = false;
    if (!$validated && !empty($config)) {
        $validated = true;
        $required  = ['DB_HOST', 'DB_NAME', 'DB_USER', 'DB_PASS'];
        foreach ($required as $req) {
            if (empty($config[$req])) {
                error_log('[env_loader] CRÍTICO: Variable ' . $req . ' vacía o faltante en .env');
            }
        }
    }

    return isset($config[$key]) ? $config[$key] : $default;
}
