<?php
declare(strict_types=1);

namespace App\Core;

abstract class Controller
{
    /**
     * Rend une vue avec son contexte.
     *
     * Le paramètre interne ne doit pas s'appeler $data :
     * extract(..., EXTR_SKIP) refuserait alors d'extraire une clé métier
     * également nommée "data". Le nom $viewVariables supprime cette collision
     * tout en conservant le comportement historique de toutes les vues.
     *
     * @param array<string,mixed> $viewVariables
     */
    protected function view(string $view, array $viewVariables = []): void
    {
        extract($viewVariables, EXTR_SKIP);

        require BASE_PATH . '/app/Views/layout/header.php';
        require BASE_PATH . '/app/Views/' . $view . '.php';
        require BASE_PATH . '/app/Views/layout/footer.php';
    }

    protected function redirect(string $url): never
    {
        header('Location: /public' . $url);
        exit;
    }
}
