<?php

namespace App\Service\Pdf;

use App\Entity\Ag\Main;
use Fpdf\Fpdf;
use Symfony\Component\HttpKernel\KernelInterface;

class AgConvocation extends Fpdf
{
    private Main $main;
    private KernelInterface $kernel;
    private \App\Entity\Members $member;

    public function __construct($orientation = 'P', $unit = 'mm', $size = 'A4')
    {
        parent::__construct($orientation, $unit, $size);
        $this->SetAutoPageBreak(true, 20); // Marge inférieure de 20mm
    }

    /**
     * Définit les données de l'Assemblée Générale et le membre destinataire.
     */
    public function setData(Main $main, KernelInterface $kernel, \App\Entity\Members $member)
    {
        $this->main = $main;
        $this->kernel = $kernel;
        $this->member = $member;
    }

    /**
     * Définit l'en-tête de chaque page (logo et titre).
     */
    public function Header()
    {
        // --- 1. Définition des constantes de position ---
        $yPos = 10;
        $xPos = 10;
        $logoWidth = 20;
        $logoHeight = 10;

        // --- 2. Logo (Haut Gauche) ---
        $logoPath = $this->kernel->getProjectDir() . '/public/assets/images/logo.jpg';
        if (file_exists($logoPath)) {
            $this->Image($logoPath, $xPos, $yPos, $logoWidth, $logoHeight);
        }

        // --- 3. Titre de l'Association (Haut Centré) ---
        $this->SetY($yPos);
        $this->SetFont('Arial', 'B', 14);
        $this->SetTextColor(0, 0, 0);
        $this->Cell(0, 7, utf8_decode('E-Cosplay Association'), 0, 1, 'C');

        $this->SetFont('Arial', '', 10);
        $this->Cell(0, 5, utf8_decode('Siège social : 42 rue de saint-quentin 02800 Beautor'), 0, 1, 'C');

        // Ligne de séparation
        $this->Ln(3);
        $this->Cell(0, 1, '', 'B', 1, 'L', false);
        $this->Ln(10);
    }

    /**
     * Définit le pied de page (numéro de page si besoin).
     */
    public function Footer()
    {
        // Positionnement à 15 mm du bas
        $this->SetY(-15);
        // Police Arial italique 8
        $this->SetFont('Arial', 'I', 8);
        // Numéro de page
        $this->Cell(0, 10, 'Page ' . $this->PageNo() . '/{nb}', 0, 0, 'C');
    }

    /**
     * Génère la convocation complète.
     */
    public function generateConvocation()
    {
        $this->AddPage();
        $this->writeRecipientBlock();
        $this->writeConvocationTitle();
        $this->writeAgContextBlock(); // Remplacement de writeDetailsBlock
        $this->writeClosure();
    }

    /**
     * Écrit le bloc destinataire (en haut à droite), en incluant l'adresse postale.
     */
    private function writeRecipientBlock()
    {
        // Positionnement à droite (Marge - Largeur du bloc destinataire)
        $this->SetX(120);
        $this->SetFont('Arial', '', 10);

        $civility = $this->member->getCiv();
        $name = $this->member->getName();
        $surname = $this->member->getSurname();


        $this->Cell(0, 5, utf8_decode("À l'attention de :"), 0, 1, 'L');
        $this->SetX(120);
        $this->SetFont('Arial', 'B', 10);
        $this->Cell(0, 5, utf8_decode("$civility $name $surname"), 0, 1, 'L');;

        $this->Ln(10);
    }

    /**
     * Écrit le titre principal de la convocation.
     */
    private function writeConvocationTitle()
    {
        $this->SetFont('Arial', 'B', 16);
        $this->Cell(0, 10, utf8_decode("CONVOCATION À L'ASSEMBLÉE GÉNÉRALE"), 0, 1, 'C');
        $this->Ln(5);
    }

    /**
     * Écrit le bloc d'informations légales et contextuelles de l'AG (copié depuis AgGenerator).
     */
    public function writeAgContextBlock()
    {
        // Récupération des données nécessaires
        $agDate = $this->main->getAgDateAt() ? $this->main->getAgDateAt()->format('d/m/Y') : 'Date non spécifiée';
        $agTime = $this->main->getAgDateAt() ? $this->main->getAgDateAt()->format('H\hi') : 'Heure non spécifiée';

        $this->SetFont('Arial', '', 10);
        $this->SetTextColor(0, 0, 0);

        // Largeur de la cellule de données (pour aligner les données)
        $dataCellWidth = 100;
        $labelCellWidth = 60;

        // Message introductif pour la convocation
        $text = utf8_decode("Cher(e) membre de l'Association E-Cosplay,");
        $this->MultiCell(0, 6, $text);
        $this->Ln(3);
        $text = utf8_decode("Vous êtes cordialement convoqué(e) à l'Assemblée Générale de notre association dont les détails sont les suivants :");
        $this->MultiCell(0, 6, $text);
        $this->Ln(5);

        // Ajout du cadre
        $this->Cell(0, 1, '', 'T', 1, 'L', false); // Ligne supérieure légère
        $this->Ln(2); // Petite marge après la ligne

        $this->SetFont('Arial', 'B', 10);
        $this->Cell(0, 5, utf8_decode('DÉTAILS DE L\'ASSEMBLÉE GÉNÉRALE'), 0, 1, 'C');
        $this->Ln(1);

        $this->SetFont('Arial', '', 10);

        // Ligne 1: Association / RNA
        $this->SetFont('Arial', 'B', 10);
        $this->Cell($labelCellWidth, 5, utf8_decode('Association :'), 0, 0, 'L');
        $this->SetFont('Arial', '', 10);
        $this->Cell($dataCellWidth, 5, utf8_decode('E-Cosplay Association loi 1901 – RNA N°W022006988'), 0, 1, 'L');

        // Ligne 2: Siège social
        $this->SetFont('Arial', 'B', 10);
        $this->Cell($labelCellWidth, 5, utf8_decode('Siège social :'), 0, 0, 'L');
        $this->SetFont('Arial', '', 10);
        $this->Cell($dataCellWidth, 5, utf8_decode('42 rue de saint-quentin 02800 Beautor'), 0, 1, 'L');

        // Ligne 3: Date de l'AG
        $this->SetFont('Arial', 'B', 10);
        $this->Cell($labelCellWidth, 5, utf8_decode("Date de l'Assemblée Générale :"), 0, 0, 'L');
        $this->SetFont('Arial', '', 10);
        $this->Cell($dataCellWidth, 5, utf8_decode($agDate), 0, 1, 'L');

        // Ligne 4: Heure de début
        $this->SetFont('Arial', 'B', 10);
        $this->Cell($labelCellWidth, 5, utf8_decode('Heure de début de la séance :'), 0, 0, 'L');
        $this->SetFont('Arial', '', 10);
        $this->Cell($dataCellWidth, 5, utf8_decode($agTime), 0, 1, 'L');

        // Ligne 5: Lieu (Dynamique)
        $this->SetFont('Arial', 'B', 10);
        $this->Cell($labelCellWidth, 5, utf8_decode('Lieu :'), 0, 0, 'L');
        $this->SetFont('Arial', '', 10);
        $this->Cell($dataCellWidth, 5, utf8_decode($this->main->getLocate() . " " . $this->main->getLocateZipcode() . " " . $this->main->getLocateCity()), 0, 1, 'L');

        // Ligne 6: Nature de l'AG (Dynamique)
        $this->SetFont('Arial', 'B', 10);
        $this->Cell($labelCellWidth, 5, utf8_decode("Nature de l'AG :"), 0, 0, 'L');
        $this->SetFont('Arial', '', 10);
        $this->Cell($dataCellWidth, 5, utf8_decode($this->main->getType()), 0, 1, 'L');

        // Fin de la mise en forme du bloc
        $this->Ln(2); // Petite marge avant la ligne
        $this->Cell(0, 1, '', 'T', 1, 'L', false); // Ligne inférieure légère
        $this->Ln(5); // Espacement final avant le corps du texte
    }

    /**
     * Écrit la formule de politesse et les informations de signature, y compris l'avertissement en rouge.
     */
    private function writeClosure()
    {
        $agCity = $this->main->getLocateCity() ?? 'Lieu non défini';
        $agDate = $this->main->getAgDateAt() ? $this->main->getAgDateAt()->format('d F Y') : 'Date non définie';
        $presidentCiv = $this->main->getPresident()->getCiv();
        $presidentTitle = ($presidentCiv === 'Mme') ? 'Présidente' : 'Président';
        $presidentFullName = $this->main->getPresident()->getName() . ' ' . $this->main->getPresident()->getSurname();

        $this->SetFont('Arial', '', 10);
        $text = utf8_decode("Nous vous rappelons que votre présence est essentielle pour la vie démocratique de l'association. En cas d'impossibilité d'être présent, vous pouvez vous faire représenter en donnant une procuration à un autre membre de votre choix.");
        $this->MultiCell(0, 6, $text);
        $this->Ln(3);

        // --- AJOUT DE LA MENTION ROUGE SUR LE VOTE ---
        $this->SetTextColor(255, 0, 0); // Rouge
        $this->SetFont('Arial', 'B', 10);
        $warningText = utf8_decode("ATTENTION : Seuls les membres à jour de leurs adhésions pourront voter.");
        $this->MultiCell(0, 6, $warningText, 0, 'C');
        $this->SetTextColor(0, 0, 0); // Réinitialiser en Noir
        $this->SetFont('Arial', '', 10); // Réinitialiser la police
        $this->Ln(5);

        $this->MultiCell(0, 6, utf8_decode("Dans l'attente de vous accueillir, veuillez agréer, cher(e) membre, l'expression de nos salutations distinguées."));
        $this->Ln(10);

        // Lieu et Date
        $this->Cell(0, 5, utf8_decode("Fait à $agCity, le $agDate"), 0, 1, 'R');
        $this->Ln(10);

        // Signature
        $this->Cell(0, 5, utf8_decode("Le $presidentTitle de l'Association,"), 0, 1, 'R');
        $this->Ln(15); // Espace pour la signature
        $this->SetFont('Arial', 'B', 10);
        $this->Cell(0, 5, utf8_decode("$presidentCiv $presidentFullName"), 0, 1, 'R');
        $this->SetFont('Arial', '', 10);
    }
}
