<?php
require_once 'includes/auth.php';
require_once 'config/database.php';
require_once 'vendor/autoload.php';

use Dompdf\Dompdf;
use Dompdf\Options;

$fiche_id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
if (!$fiche_id) {
    die("ID de fiche invalide.");
}

$pdo = getPDO();

// Récupérer les données de la fiche avec les nouvelles jointures (sous-dossiers)
$stmt = $pdo->prepare("
    SELECT f.*, sd.nom as sous_dossier_nom, d.nom as dossier_nom, p.nom as projet_nom,
           u.nom as createur_nom
    FROM fiches f
    JOIN sous_dossiers sd ON f.sous_dossier_id = sd.id
    JOIN dossiers d ON sd.dossier_id = d.id
    JOIN projets p ON d.projet_id = p.id
    LEFT JOIN users u ON f.createur_id = u.id
    WHERE f.id = ?
");
$stmt->execute([$fiche_id]);
$fiche = $stmt->fetch();
if (!$fiche) {
    die("Fiche introuvable.");
}

$contenu = json_decode($fiche['contenu'], true) ?: [];

// Normalisation des données
if (!is_array($contenu)) $contenu = [];
if (!isset($contenu['en_tete'])) $contenu['en_tete'] = [];
if (!isset($contenu['tableau'])) $contenu['tableau'] = [];
if (!isset($contenu['tableau']['colonnes'])) $contenu['tableau']['colonnes'] = [];
if (!isset($contenu['tableau']['lignes'])) $contenu['tableau']['lignes'] = [];
if (!isset($contenu['tableau']['valeurs'])) $contenu['tableau']['valeurs'] = [];

// Chemin racine pour les images
$root_path = realpath(__DIR__);
$logo_path = $root_path . '/assets/images/logo-ciber.png';
$casque_path = $root_path . '/assets/images/casque-securite.png';

function imageToBase64($path) {
    if (!file_exists($path)) return '';
    $type = pathinfo($path, PATHINFO_EXTENSION);
    $data = file_get_contents($path);
    return 'data:image/' . $type . ';base64,' . base64_encode($data);
}
$logo_base64 = imageToBase64($logo_path);
$casque_base64 = imageToBase64($casque_path);

// Construction du HTML – Style moderne et compact
$html = '<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Fiche ' . htmlspecialchars($fiche['numero_fiche']) . '</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        body {
            font-family: DejaVu Sans, Arial, sans-serif;
            font-size: 9.5px;
            line-height: 1.3;
            color: #2c3e50;
            background: #fff;
            margin: 0.6cm 0.6cm 0.6cm 0.6cm;
            padding: 0;
        }
        /* En-tête avec logos – une seule ligne */
        .header {
            display: flex;
            justify-content: space-between;
            align-items: center;
            flex-wrap: nowrap;
            border-bottom: 2px solid #1a5f7a;
            padding-bottom: 6px;
            margin-bottom: 8px;
        }
        .header .logo {
            flex: 0 0 auto;
            width: 80px;
            text-align: left;
        }
        .header .logo img {
            max-height: 45px;
            width: auto;
        }
        .header .title {
            flex: 1 1 auto;
            text-align: center;
            font-size: 14px;
            font-weight: bold;
            color: #1a5f7a;
            text-transform: uppercase;
            letter-spacing: 1px;
            white-space: nowrap;
        }
        .header .security {
            flex: 0 0 auto;
            width: 80px;
            text-align: right;
        }
        .header .security img {
            max-height: 45px;
            width: auto;
        }
        /* Titre principal */
        .main-title {
            text-align: center;
            font-size: 16px;
            font-weight: bold;
            color: #1a5f7a;
            margin: 6px 0 6px;
            padding-bottom: 3px;
            border-bottom: 1px solid #ddd;
        }
        /* Boîte d’informations */
        .info-box {
            background: #f8fafc;
            border: 1px solid #e2e8f0;
            border-radius: 6px;
            padding: 6px 8px;
            margin-bottom: 8px;
            display: flex;
            flex-wrap: wrap;
            gap: 4px;
            font-size: 8.5px;
        }
        .info-box p {
            margin: 0;
            flex: 1 1 auto;
            min-width: 150px;
        }
        .info-box strong {
            color: #1a5f7a;
        }
        /* Sections */
        h2 {
            font-size: 11px;
            background: #eef2ff;
            padding: 3px 6px;
            margin: 8px 0 4px;
            border-left: 4px solid #1a5f7a;
            color: #1e293b;
        }
        /* Tableaux */
        table {
            width: 100%;
            border-collapse: collapse;
            margin: 4px 0;
            font-size: 8.5px;
        }
        th {
            background: #1a5f7a;
            color: white;
            padding: 3px 4px;
            font-weight: bold;
            border: 1px solid #2c3e50;
        }
        td {
            border: 1px solid #cbd5e1;
            padding: 3px 4px;
            vertical-align: top;
        }
        tr:nth-child(even) {
            background: #f9fafb;
        }
        /* Signature */
        .signature-block {
            margin-top: 8px;
            display: flex;
            justify-content: space-between;
            gap: 20px;
            border-top: 1px solid #ddd;
            padding-top: 8px;
        }
        .signature-item {
            flex: 1;
            text-align: center;
        }
        .signature-item img {
            max-height: 55px;
            border: 1px solid #ccc;
            border-radius: 4px;
            background: white;
            padding: 3px;
        }
        .signature-item p {
            margin: 2px 0 0;
            font-size: 7.5px;
            color: #475569;
        }
        /* Badges */
        .badge {
            display: inline-block;
            padding: 1px 6px;
            border-radius: 10px;
            font-weight: bold;
            font-size: 7.5px;
        }
        .badge-success {
            background: #dcfce7;
            color: #166534;
        }
        .badge-danger {
            background: #fee2e2;
            color: #991b1b;
        }
        /* Pied de page */
        .footer {
            margin-top: 10px;
            font-size: 7.5px;
            text-align: center;
            color: #64748b;
            border-top: 1px dashed #cbd5e1;
            padding-top: 5px;
        }
        /* Éviter les coupures de page */
        .page-break-inside-avoid {
            page-break-inside: avoid;
        }
        .info-box, .signature-block, table {
            page-break-inside: avoid;
        }
        /* Ajustements pour compactage */
        .compact-table td, .compact-table th {
            padding: 2px 3px;
        }
        /* Forcer une seule page */
        @page {
            margin: 0.5cm;
            size: A4;
        }
    </style>
</head>
<body>
<div class="header">
    <div class="logo">' . ($logo_base64 ? '<img src="' . $logo_base64 . '">' : '<span style="font-size:18px;">CIBER</span>') . '</div>
    <div class="title">FICHE D\'AUTO-CONTRÔLE QUALITÉ</div>
    <div class="security">' . ($casque_base64 ? '<img src="' . $casque_base64 . '">' : '') . '</div>
</div>
<div class="main-title">' . htmlspecialchars($fiche['titre']) . '</div>
<div class="info-box">
    <p><strong>N° fiche :</strong> ' . htmlspecialchars($fiche['numero_fiche']) . '</p>
    <p><strong>Projet :</strong> ' . htmlspecialchars($fiche['projet_nom']) . '</p>
    <p><strong>Dossier :</strong> ' . htmlspecialchars($fiche['dossier_nom']) . '</p>
    <p><strong>Sous-dossier :</strong> ' . htmlspecialchars($fiche['sous_dossier_nom']) . '</p>
    <p><strong>Zone :</strong> ' . nl2br(htmlspecialchars($fiche['zone'] ?? '')) . '</p>
    <p><strong>Observation :</strong> ' . nl2br(htmlspecialchars($fiche['observation'] ?? '')) . '</p>
    <p><strong>Type :</strong> <span class="badge ' . ($fiche['type_reserve'] == 'sans_reserve' ? 'badge-success' : 'badge-danger') . '">' . ($fiche['type_reserve'] == 'sans_reserve' ? 'Sans réserve' : 'Avec réserve') . '</span></p>';
if ($fiche['type_reserve'] == 'avec_reserve' && !empty($fiche['description_reserve'])) {
    $html .= '<p><strong>Description des réserves :</strong><br>' . nl2br(htmlspecialchars($fiche['description_reserve'])) . '</p>';
}
$html .= '<p><strong>Statut :</strong> ' . $fiche['statut'] . '</p>
    <p><strong>Créé par :</strong> ' . htmlspecialchars($fiche['createur_nom'] ?? '') . ' le ' . date('d/m/Y H:i', strtotime($fiche['date_creation'])) . '</p>
</div>';

// En-tête dynamique (champs personnalisés)
if (!empty($contenu['en_tete'])) {
    $html .= '<h2>Informations complémentaires</h2>';
    $html .= '<table class="compact-table"><tbody>';
    foreach ($contenu['en_tete'] as $champ) {
        $html .= '<tr><th style="width:30%;">' . htmlspecialchars($champ['label']) . '</th><td>' . nl2br(htmlspecialchars($champ['valeur'] ?? '')) . '</td></tr>';
    }
    $html .= '</tbody></table>';
}

// Tableau des contrôles
if (!empty($contenu['tableau']['lignes'])) {
    $html .= '<h2>Contrôles</h2>';
    $html .= '<table><thead><tr><th>Élément contrôlé</th>';
    foreach ($contenu['tableau']['colonnes'] as $col) {
        $html .= '<th>' . htmlspecialchars($col['label']) . '</th>';
    }
    $html .= '</tr></thead><tbody>';
    foreach ($contenu['tableau']['lignes'] as $i => $ligne) {
        $html .= '<tr><td>' . htmlspecialchars($ligne) . '</td>';
        foreach ($contenu['tableau']['colonnes'] as $j => $col) {
            $val = $contenu['tableau']['valeurs'][$i][$j] ?? '';
            $cell = '';
            switch ($col['type']) {
                case 'radio':
                    $cell = $val ? htmlspecialchars($val) : '';
                    break;
                case 'checkbox':
                    $cell = $val == 'on' ? '✓' : '';
                    break;
                case 'textarea':
                    $cell = nl2br(htmlspecialchars($val));
                    break;
                default:
                    $cell = nl2br(htmlspecialchars($val));
            }
            $html .= '<td class="text-center">' . $cell . '</td>';
        }
        $html .= '</tr>';
    }
    $html .= '</tbody></table>';
}
// Images
$stmt_img = $pdo->prepare("SELECT * FROM fiches_images WHERE fiche_id = ? ORDER BY ordre");
$stmt_img->execute([$fiche['id']]);
$images = $stmt_img->fetchAll();
if (!empty($images)) {
    $html .= '<h2>Images jointes</h2>';
    foreach ($images as $img) {
        $img_base64 = imageToBase64($img['image_path']);
        if ($img_base64) {
            $html .= '<div style="page-break-inside: avoid; margin-bottom: 10px;">';
            $html .= '<img src="' . $img_base64 . '" style="max-width: 100%; max-height: 300px;">';
            if (!empty($img['annotations'])) {
                $html .= '<p><em>Annotée</em></p>';
            }
            $html .= '</div>';
        }
    }
}
// Signatures
$sign_emetteur = $fiche['signature_emetteur'] ?? null;
$sign_resp = $fiche['signature_responsable'] ?? null;
$sign_date = $fiche['signature_responsable_date'] ?? null;

$html .= '<div class="signature-block">
    <div class="signature-item">
        <strong>Signature de l\'émetteur</strong><br>';
if ($sign_emetteur && file_exists($sign_emetteur)) {
    $html .= '<img src="' . imageToBase64($sign_emetteur) . '">';
} else {
    $html .= '<span style="color:#999;">Non signé</span>';
}
$html .= '</div>
    <div class="signature-item">
        <strong>Signature du responsable hiérarchique</strong><br>';
if ($sign_resp && file_exists($sign_resp)) {
    $html .= '<img src="' . imageToBase64($sign_resp) . '">';
    if ($sign_date) {
        $html .= '<p>Signé le ' . date('d/m/Y H:i', strtotime($sign_date)) . '</p>';
    }
} else {
    $html .= '<span style="color:#999;">Non signé</span>';
}
$html .= '</div>
</div>';

$html .= '<div class="footer">Document généré le ' . date('d/m/Y H:i') . ' - CIBER Auto-contrôle</div>
</body>
</html>';

// Génération du PDF
$options = new Options();
$options->set('defaultFont', 'DejaVu Sans');
$options->set('isRemoteEnabled', false);
$options->set('isHtml5ParserEnabled', true);
$options->set('isPhpEnabled', false);

$dompdf = new Dompdf($options);
$dompdf->loadHtml($html);
$dompdf->setPaper('A4', 'portrait');
$dompdf->set_option('chroot', realpath(__DIR__));
$dompdf->render();

// Envoi au navigateur
$dompdf->stream("fiche_" . $fiche['numero_fiche'] . ".pdf", array("Attachment" => 1));
exit;