<?php
namespace App\Services;

use App\Models\ConsentDocument;
use App\Models\MemberProfile;
use RuntimeException;

final class ConsentPdfService
{
    public function generate(
        int $documentId,
        string $signer,
        string $quality,
        string $signatureData
    ): array {
        $document=ConsentDocument::find($documentId);

        if(!$document){
            throw new RuntimeException('Document introuvable.');
        }

        $member=MemberProfile::find((int)$document['membre_id']);

        if(!$member){
            throw new RuntimeException('Membre introuvable.');
        }

        $storage=BASE_PATH.'/storage/documents/consentements';

        if(!is_dir($storage)){
            mkdir($storage,0775,true);
        }

        $filename=sprintf(
            '%s_%s_%d_%s.html',
            $document['type_document'],
            preg_replace('/[^A-Za-z0-9_-]/','_',(string)$document['annee_scolaire']),
            $documentId,
            date('Ymd_His')
        );

        $relative='storage/documents/consentements/'.$filename;
        $absolute=BASE_PATH.'/'.$relative;
        $choices=json_decode((string)$document['choix_json'],true) ?: [];

        $html='<!doctype html><html lang="fr"><head><meta charset="utf-8">'
            .'<style>body{font-family:Arial,sans-serif;color:#0f2447;padding:34px}'
            .'h1{color:#2458ff}.box{border:1px solid #ccd6ee;border-radius:12px;padding:18px;margin:18px 0}'
            .'small{color:#65738f}</style></head><body>'
            .'<h1>Carrefour des Arts de Bray-Dunes</h1>'
            .'<h2>'.htmlspecialchars(
                $document['type_document']==='rgpd'
                    ? 'Information et choix relatifs aux données personnelles'
                    : 'Autorisation de droit à l’image'
            ).'</h2>'
            .'<div class="box"><strong>Membre concerné :</strong> '
            .htmlspecialchars($member['prenom'].' '.$member['nom'])
            .'<br><strong>Année scolaire :</strong> '
            .htmlspecialchars((string)$document['annee_scolaire'])
            .'<br><strong>Version :</strong> '
            .htmlspecialchars((string)$document['version_document'])
            .'</div>'
            .'<div class="box"><strong>Choix enregistrés</strong><ul>';

        foreach($choices as $key=>$value){
            $html.='<li>'.htmlspecialchars((string)$key)
                .' : '.htmlspecialchars(
                    is_bool($value)
                        ? ($value ? 'Oui' : 'Non')
                        : (string)$value
                ).'</li>';
        }

        $html.='</ul></div>'
            .'<div class="box"><strong>Signataire :</strong> '
            .htmlspecialchars($signer)
            .'<br><strong>Qualité :</strong> '
            .htmlspecialchars($quality)
            .'<br><strong>Date :</strong> '
            .date('d/m/Y H:i')
            .'<br><strong>Signature :</strong><br>';

        if(str_starts_with($signatureData,'data:image/')){
            $html.='<img src="'.htmlspecialchars($signatureData)
                .'" style="max-width:360px;max-height:150px">';
        }else{
            $html.='<em>Signature importée ou enregistrée</em>';
        }

        $html.='</div><small>Document généré par CDA. '
            .'Une empreinte SHA-256 garantit son intégrité.</small>'
            .'</body></html>';

        file_put_contents($absolute,$html);

        return [
            'path'=>$relative,
            'checksum'=>hash_file('sha256',$absolute)
        ];
    }
}
