<?php
namespace App\Controllers;

use App\Core\Auth;
use App\Core\Controller;
use App\Core\Csrf;
use App\Core\Permission;
use App\Models\Parameter;

final class ParameterController extends Controller
{
    public function index(): void
    {
        Auth::requireLogin();

        $this->view('parameters/index',[
            'pageTitle'=>'Paramètres',
            'poles'=>Parameter::poles(),
            'disciplines'=>Parameter::disciplines(),
            'publics'=>Parameter::publics(),
            'schoolLevels'=>Parameter::schoolLevels(),
            'eligibilityRules'=>Parameter::eligibilityRules(),
        ]);
    }

    public function storePole(): void
    {
        Auth::requireLogin();
        Permission::require('parametres.poles.manage');
        Csrf::verify($_POST['_csrf']??null);

        $code=strtoupper(trim($_POST['code']??''));
        $libelle=trim($_POST['libelle']??'');

        if($code==='' || $libelle===''){
            $_SESSION['form_errors']=[
                'Le code et le libellé du pôle sont obligatoires.'
            ];
            $this->redirect('/parametres');
        }

        Parameter::createPole([
            'organisation_id'=>
                (int)(Auth::user()['organisation_id']??1),
            'code'=>$code,
            'libelle'=>$libelle,
            'ordre_affichage'=>
                (int)($_POST['ordre_affichage']??100),
        ]);

        $_SESSION['success']='Le pôle a été ajouté.';
        $this->redirect('/parametres');
    }

    public function storeDiscipline(): void
    {
        Auth::requireLogin();
        Permission::require('parametres.disciplines.manage');
        Csrf::verify($_POST['_csrf']??null);

        $poleId=(int)($_POST['pole_id']??0);
        $code=strtoupper(trim($_POST['code']??''));
        $libelle=trim($_POST['libelle']??'');
        $individualDuration=(int)($_POST['duree_individuelle_minutes']??30);
        $collectiveDuration=(int)($_POST['duree_collective_minutes']??60);

        if(
            !$poleId || $code==='' || $libelle==='' ||
            $individualDuration<5 || $individualDuration>480 ||
            $collectiveDuration<5 || $collectiveDuration>480 ||
            $individualDuration%5!==0 || $collectiveDuration%5!==0
        ){
            $_SESSION['form_errors']=[
                'Le pôle, le code et le libellé sont obligatoires. '
                .'Les durées doivent être comprises entre 5 et 480 minutes, par pas de 5 minutes.'
            ];
            $this->redirect('/parametres');
        }

        Parameter::createDiscipline([
            'organisation_id'=>
                (int)(Auth::user()['organisation_id']??1),
            'pole_id'=>$poleId,
            'code'=>$code,
            'libelle'=>$libelle,
            'duree_individuelle_minutes'=>$individualDuration,
            'duree_collective_minutes'=>$collectiveDuration,
        ]);

        $_SESSION['success']='La discipline a été ajoutée.';
        $this->redirect('/parametres');
    }
}
