<?php

/**
 * System configuration manager
 * - Loads and validates environment variables
 * - Defines global constants for system settings
 * - Manages security rules and external service configs
 */

require_once __DIR__ . '/vendor/autoload.php';

try {
    // Load environment variables
    $dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
    $dotenv->load();

    // Validate required fields
    $dotenv->required([
        'SITE_NAME',
        'SITE_DESCRIPTION',
        'SITE_URL'
    ])->notEmpty();

    // Validate URL format
    if (!filter_var($_ENV['SITE_URL'], FILTER_VALIDATE_URL)) {
        throw new Exception('SITE_URL must be a valid URL');
    }

    // Core system settings
    define('SITE_NAME', $_ENV['SITE_NAME']);
    define('SITE_DESCRIPTION', $_ENV['SITE_DESCRIPTION']);
    define('SITE_URL', $_ENV['SITE_URL']);
    define('CLEANUP_DAYS', $_ENV['CLEANUP_DAYS'] ?? 0);
    
    // Optional settings with defaults
    define('DNS_SERVERS', $_ENV['DNS_SERVERS'] ?? '1.1.1.1, 8.8.8.8');
    define('DISABLE_CACHE', isset($_ENV['DISABLE_CACHE']) ? filter_var($_ENV['DISABLE_CACHE'], FILTER_VALIDATE_BOOLEAN) : false);
    define('SELENIUM_HOST', $_ENV['SELENIUM_HOST'] ?? 'localhost:4444');
    define('CACHE_DIR', __DIR__ . '/cache');
    define('LANGUAGE', $_ENV['LANGUAGE'] ?? 'pt-br');

    // Logging configuration
    define('LOG_LEVEL', $_ENV['LOG_LEVEL'] ?? 'WARNING'); // DEBUG, INFO, WARNING, ERROR, CRITICAL
    define('LOG_DAYS_TO_KEEP', 7);

    // S3 cache configuration
    define('S3_CACHE_ENABLED', isset($_ENV['S3_CACHE_ENABLED']) ? filter_var($_ENV['S3_CACHE_ENABLED'], FILTER_VALIDATE_BOOLEAN) : false);
    
    if (S3_CACHE_ENABLED) {
        $dotenv->required([
            'S3_ACCESS_KEY',
            'S3_SECRET_KEY',
            'S3_BUCKET'
        ])->notEmpty();

        define('S3_ACCESS_KEY', $_ENV['S3_ACCESS_KEY']);
        define('S3_SECRET_KEY', $_ENV['S3_SECRET_KEY']);
        define('S3_BUCKET', $_ENV['S3_BUCKET']);
        define('S3_REGION', $_ENV['S3_REGION'] ?? 'us-east-1');
        define('S3_FOLDER', $_ENV['S3_FOLDER'] ?? 'cache/');
        define('S3_ACL', $_ENV['S3_ACL'] ?? 'private');
        define('S3_ENDPOINT', $_ENV['S3_ENDPOINT'] ?? null);
    }

    // Load security rules
    define('BLOCKED_DOMAINS', require __DIR__ . '/data/blocked_domains.php');
    define('DOMAIN_RULES', require __DIR__ . '/data/domain_rules.php');
    define('GLOBAL_RULES', require __DIR__ . '/data/global_rules.php');

} catch (Dotenv\Exception\ValidationException $e) {
    die('Environment Error: ' . $e->getMessage());
} catch (Exception $e) {
    die('Configuration Error: ' . $e->getMessage());
}