<?php
/**
 * Hockey Drop-In Application Bootstrap
 * Front controller - all requests go through here
 */

// Error reporting (will be disabled in production via config)
error_reporting(E_ALL);
ini_set('display_errors', '1');

// Define base path
define('BASE_PATH', __DIR__);

// Load configuration
$config = require BASE_PATH . '/config.php';

// Set timezone
date_default_timezone_set($config['app']['timezone']);

// Configure error reporting based on environment
if (!$config['app']['debug']) {
    error_reporting(0);
    ini_set('display_errors', '0');
}

// Autoloader
spl_autoload_register(function ($class) {
    // Convert namespace to file path
    $prefix = 'App\\';
    $baseDir = BASE_PATH . '/app/';
    
    $len = strlen($prefix);
    if (strncmp($prefix, $class, $len) !== 0) {
        return;
    }
    
    $relativeClass = substr($class, $len);
    $file = $baseDir . str_replace('\\', '/', $relativeClass) . '.php';
    
    if (file_exists($file)) {
        require $file;
    }
});

// Load Composer autoloader if exists
$composerAutoload = BASE_PATH . '/vendor/autoload.php';
if (file_exists($composerAutoload)) {
    require $composerAutoload;
}

// Load helper functions
require_once BASE_PATH . '/app/Helpers/functions.php';

// Start session
$sessionConfig = $config['session'];
session_name($sessionConfig['name']);

if ($sessionConfig['secure'] && isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') {
    ini_set('session.cookie_secure', '1');
}
ini_set('session.cookie_httponly', '1');
ini_set('session.cookie_samesite', 'Lax');

session_start();

// Check remember me cookie
\App\Middleware\AuthMiddleware::checkRememberMe();

// Generate CSRF token
\App\Middleware\CsrfMiddleware::generateToken();

// Get request method and URI
$method = $_SERVER['REQUEST_METHOD'];
$uri = $_SERVER['REQUEST_URI'];

// Remove base path from URI if needed
$basePath = parse_url($config['app']['url'], PHP_URL_PATH) ?? '';
if (!empty($basePath) && strpos($uri, $basePath) === 0) {
    $uri = substr($uri, strlen($basePath));
}

// Load routes and dispatch
$router = require BASE_PATH . '/app/Routes/routes.php';
$router->dispatch($method, $uri);
