<?php
namespace App\Controllers;
use App\Core\{Auth,Controller,Csrf,Permission};
use App\Models\ProfessorConsent;
use App\Security\SecureFileService;
final class ProfessorConsentController extends Controller
{
 public function index():void{Auth::requireLogin();Permission::require('professeurs.pro.view');$id=(int)($_GET['professeur_id']??0);$p=ProfessorConsent::professor($id);if(!$p){http_response_code(404);exit('Professeur introuvable.');}$this->view('professor_consents/index',['pageTitle'=>'Consentements professeur','professor'=>$p,'documents'=>ProfessorConsent::all($id)]);}
 public function store():void{Auth::requireLogin();Permission::require('professeurs.edit');Csrf::verify($_POST['_csrf']??null);$id=(int)$_POST['professeur_id'];$p=ProfessorConsent::professor($id);if(!$p)throw new \RuntimeException('Professeur introuvable.');$type=in_array($_POST['type_document']??'', ['rgpd','droit_image'],true)?$_POST['type_document']:'rgpd';$choices=$type==='rgpd'?['traitement_dossier'=>true,'communications_email'=>isset($_POST['communications_email'])]:['decision'=>($_POST['decision']??'accorde')==='refuse'?'refuse':'accorde','photo_individuelle'=>isset($_POST['photo_individuelle']),'photo_groupe'=>isset($_POST['photo_groupe']),'site_internet'=>isset($_POST['site_internet']),'reseaux_sociaux'=>isset($_POST['reseaux_sociaux']),'affiches'=>isset($_POST['affiches']),'presse'=>isset($_POST['presse']),'video'=>isset($_POST['video'])];ProfessorConsent::create(['organisation_id'=>$p['organisation_id'],'professeur_id'=>$id,'type_document'=>$type,'annee_scolaire'=>trim((string)($_POST['annee_scolaire']??'2026-2027')),'choix_json'=>json_encode($choices,JSON_UNESCAPED_UNICODE),'email_destinataire'=>filter_var($p['email'],FILTER_VALIDATE_EMAIL)?$p['email']:null,'created_by'=>(int)Auth::id()?:null]);$_SESSION['success']='Le document professeur a été préparé.';$this->redirect('/professeurs/consentements?professeur_id='.$id);}
 public function send():void{Auth::requireLogin();Permission::require('professeurs.edit');Csrf::verify($_POST['_csrf']??null);$document=ProfessorConsent::find((int)$_POST['id']);if(!$document)throw new \RuntimeException('Document introuvable.');$email=filter_var(trim((string)($_POST['email']??'')),FILTER_VALIDATE_EMAIL);if(!$email)throw new \RuntimeException('Adresse e-mail invalide.');$token=bin2hex(random_bytes(32));ProfessorConsent::createToken((int)$document['id'],$email,$token,(new \DateTimeImmutable('+7 days'))->format('Y-m-d H:i:s'));$host=preg_replace('/[^A-Za-z0-9.:-]/','',(string)($_SERVER['HTTP_HOST']??''));$scheme=(!empty($_SERVER['HTTPS'])&&$_SERVER['HTTPS']!=='off')?'https':'http';$url=$scheme.'://'.$host.'/public/professeur-consentement-public?token='.rawurlencode($token);$subject=($document['type_document']==='rgpd'?'Validation RGPD':'Droit à l’image').' - Carrefour des Arts';$body='<h2>Carrefour des Arts de Bray-Dunes</h2><p>Bonjour '.htmlspecialchars($document['prenom']).',</p><p>Merci de consulter et signer votre document sécurisé :</p><p><a href="'.htmlspecialchars($url).'">Ouvrir le document</a></p><p>Ce lien personnel expire dans 7 jours et ne pourra être utilisé qu’une fois.</p>';$headers="MIME-Version: 1.0\r\nContent-Type: text/html; charset=UTF-8\r\n";$ok=@mail($email,$subject,$body,$headers);ProfessorConsent::emailResult((int)$document['id'],$ok,$ok?null:'Le serveur de messagerie a refusé l’envoi.');$_SESSION[$ok?'success':'error']=$ok?'Lien sécurisé envoyé.':'Le lien a été créé, mais le serveur a refusé le mail.';$this->redirect('/professeurs/consentements?professeur_id='.(int)$document['professeur_id']);}
 public function publicForm():void{$token=(string)($_GET['token']??'');$document=ProfessorConsent::byToken($token);if(!$document){http_response_code(410);exit('Lien invalide, expiré ou déjà utilisé.');}require BASE_PATH.'/app/Views/professor_consents/public.php';}
 public function publicSign():void{$token=(string)($_POST['token']??'');$document=ProfessorConsent::byToken($token);if(!$document){http_response_code(410);exit('Lien invalide, expiré ou déjà utilisé.');}$signature=(string)($_POST['signature_data']??'');if(!str_starts_with($signature,'data:image/'))throw new \RuntimeException('La signature est obligatoire.');ProfessorConsent::sign((int)$document['id'],(int)$document['token_id'],trim((string)($_POST['nom_signataire']??'')),$signature,'lien_email');require BASE_PATH.'/app/Views/professor_consents/done.php';}
 public function sign():void{Auth::requireLogin();Permission::require('professeurs.edit');Csrf::verify($_POST['_csrf']??null);$document=ProfessorConsent::find((int)$_POST['id']);if(!$document)throw new \RuntimeException('Document introuvable.');$signature=(string)($_POST['signature_data']??'');if(!str_starts_with($signature,'data:image/'))throw new \RuntimeException('La signature est obligatoire.');ProfessorConsent::sign((int)$document['id'],0,trim((string)($_POST['nom_signataire']??'')),$signature,'sur_place');$_SESSION['success']='Document signé et validé.';$this->redirect('/professeurs/consentements?professeur_id='.(int)$document['professeur_id']);}
 public function import():void{Auth::requireLogin();Permission::require('professeurs.edit');Csrf::verify($_POST['_csrf']??null);$document=ProfessorConsent::find((int)$_POST['id']);if(!$document)throw new \RuntimeException('Document introuvable.');$stored=SecureFileService::storeUploaded($_FILES['document_signe']??[],BASE_PATH.'/storage/documents/professeurs',['application/pdf'=>['pdf'],'image/jpeg'=>['jpg','jpeg'],'image/png'=>['png']],10485760,'consentement_'.$document['id']);ProfessorConsent::import((int)$document['id'],str_replace(BASE_PATH.'/','',$stored['path']),$stored['sha256']);$_SESSION['success']='Document signé importé et contrôlé.';$this->redirect('/professeurs/consentements?professeur_id='.(int)$document['professeur_id']);}
 public function print():void{Auth::requireLogin();Permission::require('professeurs.pro.view');$d=ProfessorConsent::find((int)($_GET['id']??0));if(!$d){http_response_code(404);exit('Document introuvable.');}$choices=json_decode((string)$d['choix_json'],true)?:[];header('Content-Type: text/html; charset=UTF-8');?><!doctype html><html lang="fr"><head><meta charset="utf-8"><title>Consentement professeur</title><style>body{font-family:Arial;color:#102449;max-width:850px;margin:35px auto;line-height:1.5}header{border-bottom:3px solid #315bd4}section{margin:22px 0;padding:18px;border:1px solid #ccd6e5}footer{margin-top:70px;display:grid;grid-template-columns:1fr 1fr;gap:50px}.line{height:80px;border-bottom:1px solid #223}</style></head><body><header><h1>Carrefour des Arts de Bray-Dunes</h1><p>96, rue Auguste Coolen — 59123 Bray-Dunes</p></header><h2><?=$d['type_document']==='rgpd'?'Consentement RGPD':'Autorisation de droit à l’image'?></h2><section><b>Professeur :</b> <?=htmlspecialchars($d['prenom'].' '.$d['nom'])?><br><b>Année scolaire :</b> <?=htmlspecialchars($d['annee_scolaire'])?></section><section><h3>Choix enregistrés</h3><ul><?php foreach($choices as$k=>$v):?><li><?=htmlspecialchars(str_replace('_',' ',$k))?> : <?=is_bool($v)?($v?'Oui':'Non'):htmlspecialchars((string)$v)?></li><?php endforeach?></ul></section><footer><div>Date :<div class="line"></div></div><div>Signature :<div class="line"></div></div></footer><script>window.print()</script></body></html><?php exit;}
}
