<?php
/**
 * Bootstrap - inicjalizacja aplikacji
 */

// Załaduj konfigurację
require_once __DIR__ . '/../config/config.php';

// Autoloader dla klas
spl_autoload_register(function ($class) {
    $classFile = PANEL_PATH . '/classes/' . $class . '.php';
    if (file_exists($classFile)) {
        require_once $classFile;
    }
});

// Załaduj funkcje pomocnicze
require_once __DIR__ . '/functions.php';

// Rozpocznij sesję PHP (dla CSRF)
if (session_status() === PHP_SESSION_NONE) {
    session_name('playlist_panel_php');
    session_start();
}

// Inicjalizuj Smarty
function initSmarty(): Smarty
{
    $smarty = new Smarty();
    $smarty->setTemplateDir(TEMPLATES_PATH);
    $smarty->setCompileDir(CACHE_PATH . '/templates_c');
    $smarty->setCacheDir(CACHE_PATH . '/cache');
    
    // Utwórz katalogi jeśli nie istnieją
    foreach ([$smarty->getCompileDir(), $smarty->getCacheDir()] as $dir) {
        if (!is_dir($dir)) {
            mkdir($dir, 0755, true);
        }
    }
    
    // Globalne zmienne
    $auth = new Auth();
    $smarty->assign('currentUser', $auth->user());
    $smarty->assign('isAdmin', $auth->isAdmin());
    $smarty->assign('isReseller', $auth->isReseller());
    $smarty->assign('isManager', $auth->isManager());
    $smarty->assign('csrfToken', $auth->generateCsrfToken());
    $smarty->assign('baseUrl', getBaseUrl());
    
    // Pobierz linki zewnętrzne dla menu (tylko dla zalogowanych)
    if ($auth->check()) {
        try {
            $externalLinks = new ExternalLinks();
            $smarty->assign('externalLinks', $externalLinks->getActive());
        } catch (Exception $e) {
            $smarty->assign('externalLinks', []);
        }
    }
    
    return $smarty;
}

// Router
function route(): void
{
    $routes = require PANEL_PATH . '/config/routes.php';
    $auth = new Auth();
    
    // Pobierz ścieżkę z URL
    $path = $_GET['route'] ?? '';
    $path = trim($path, '/');
    
    // Znajdź pasującą trasę
    $route = $routes[$path] ?? null;
    
    if (!$route) {
        http_response_code(404);
        echo "404 - Strona nie znaleziona";
        exit;
    }
    
    // Sprawdź autoryzację
    if ($route['auth'] && !$auth->check()) {
        redirect('login');
        exit;
    }
    
    // Sprawdź czy wymaga admina
    if (!empty($route['admin']) && !$auth->isAdmin()) {
        http_response_code(403);
        echo "403 - Brak dostępu";
        exit;
    }
    
    // Załaduj kontroler
    $controllerFile = PANEL_PATH . '/controllers/' . $route['controller'] . '.php';
    if (!file_exists($controllerFile)) {
        http_response_code(500);
        echo "500 - Kontroler nie istnieje: " . $route['controller'];
        exit;
    }
    
    require_once $controllerFile;
    
    $controllerClass = $route['controller'];
    $controller = new $controllerClass();
    $action = $route['action'];
    
    if (!method_exists($controller, $action)) {
        http_response_code(500);
        echo "500 - Akcja nie istnieje: {$action}";
        exit;
    }
    
    $controller->$action();
}
