<?php
namespace App\Controllers;
use App\Core\Auth;use App\Core\Controller;use App\Core\Csrf;use App\Core\Formatter;use App\Core\Permission;use App\Models\Person;
final class PersonController{
 use \App\Controllers\PersonViewTrait;
 public function index():void{Auth::requireLogin();Permission::require('personnes.view');$q=trim($_GET['q']??'');$this->view('persons/index',['pageTitle'=>'Adhérents','persons'=>Person::search($q),'query'=>$q]);}
 public function create():void{Auth::requireLogin();Permission::require('personnes.create');$this->view('persons/form',['pageTitle'=>'Nouvel adhérent']);}
 public function store():void{Auth::requireLogin();Permission::require('personnes.create');Csrf::verify($_POST['_csrf']??null);$errors=[];$a=['civilite'=>$_POST['civilite']??'Non renseigne','nom'=>Formatter::lastName($_POST['nom']??''),'prenom'=>Formatter::firstName($_POST['prenom']??''),'date_naissance'=>trim($_POST['date_naissance']??''),'genre'=>$_POST['genre']??'non_renseigne','email'=>Formatter::email($_POST['email']??''),'telephone_principal'=>Formatter::phone($_POST['telephone_principal']??''),'telephone_secondaire'=>Formatter::phone($_POST['telephone_secondaire']??''),'adresse_ligne1'=>trim($_POST['adresse_ligne1']??''),'adresse_ligne2'=>trim($_POST['adresse_ligne2']??''),'code_postal'=>Formatter::postalCode($_POST['code_postal']??''),'ville'=>Formatter::city($_POST['ville']??''),'pays'=>trim($_POST['pays']??'France'),'droit_image'=>$_POST['droit_image']??'non_renseigne','rgpd_accepte'=>isset($_POST['rgpd_accepte'])?1:0,'notes'=>trim($_POST['notes']??'')];if($a['nom']==='')$errors[]='Le nom est obligatoire.';if($a['prenom']==='')$errors[]='Le prénom est obligatoire.';if($a['date_naissance']==='')$errors[]='La date de naissance est obligatoire.';if(Person::duplicateExists($a['nom'],$a['prenom'],$a['date_naissance']))$errors[]='Cet adhérent existe déjà.';$g=[];for($i=1;$i<=2;$i++)$g[]=['civilite'=>$_POST["responsable_{$i}_civilite"]??'Non renseigne','nom'=>Formatter::lastName($_POST["responsable_{$i}_nom"]??''),'prenom'=>Formatter::firstName($_POST["responsable_{$i}_prenom"]??''),'date_naissance'=>trim($_POST["responsable_{$i}_date_naissance"]??''),'type_lien'=>$_POST["responsable_{$i}_type_lien"]??'parent','email'=>Formatter::email($_POST["responsable_{$i}_email"]??''),'telephone_principal'=>Formatter::phone($_POST["responsable_{$i}_telephone_principal"]??''),'telephone_secondaire'=>Formatter::phone($_POST["responsable_{$i}_telephone_secondaire"]??''),'autorite_parentale'=>isset($_POST["responsable_{$i}_autorite_parentale"])?1:0,'responsable_legal'=>isset($_POST["responsable_{$i}_responsable_legal"])?1:0,'payeur_principal'=>isset($_POST["responsable_{$i}_payeur_principal"])?1:0,'autorise_recuperer'=>isset($_POST["responsable_{$i}_autorise_recuperer"])?1:0,'recoit_emails'=>isset($_POST["responsable_{$i}_recoit_emails"])?1:0,'recoit_sms'=>isset($_POST["responsable_{$i}_recoit_sms"])?1:0,'recoit_factures'=>isset($_POST["responsable_{$i}_recoit_factures"])?1:0,'recoit_documents'=>isset($_POST["responsable_{$i}_recoit_documents"])?1:0];if($errors){$_SESSION['form_errors']=$errors;$_SESSION['old']=$_POST;$this->redirect('/adherents/nouveau');}$a['organisation_id']=(int)(Auth::user()['organisation_id']??1);$id=Person::create($a,$g,(int)Auth::id());$_SESSION['success']='Adhérent créé.';$this->redirect('/adherents/voir?id='.$id);}
 public function show():void{Auth::requireLogin();Permission::require('personnes.view');$id=(int)($_GET['id']??0);$p=Person::find($id);if(!$p){http_response_code(404);exit('Adhérent introuvable.');}$this->view('persons/show',['pageTitle'=>'Dossier adhérent','person'=>$p,'guardians'=>Person::guardians($id)]);}
}
