<?php
require_once 'connexion/auth.php'; 

// SÉCURITÉ 1 : Il faut au moins être connecté
if (!function_exists('isLogged') || !isLogged()) {
    header('Location: index.php');
    exit();
}

// SÉCURITÉ 2 : On définit qui a le droit de GÉRER
$est_privilegie = false;
$peut_valider_salle = false;
if (function_exists('hasRole')) {
    if (hasRole('Administrateur') || hasRole('Maire') || hasRole('Adjoint') || hasRole('Secretaire') || hasRole('Conseiller')) {
        $est_privilegie = true;
    }
    if (hasRole('Administrateur') || hasRole('Maire') || hasRole('Adjoint') || hasRole('Secretaire')) {
        $peut_valider_salle = true;
    }
}

// ==========================================
// FONCTION POUR LES DATES DU CONTRAT
// ==========================================
function formatDateTimeFr($str) {
    if (!$str) return '_________________________';
    try {
        // Si c'est le nouveau format du calendrier (YYYY-MM-DDTHH:MM)
        if (preg_match('/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}/', $str)) {
            $d = new DateTime($str);
            $jours = ['Sunday'=>'Dimanche','Monday'=>'Lundi','Tuesday'=>'Mardi','Wednesday'=>'Mercredi','Thursday'=>'Jeudi','Friday'=>'Vendredi','Saturday'=>'Samedi'];
            return $jours[$d->format('l')] . ' ' . $d->format('d/m/Y') . ' à ' . $d->format('H\hi');
        }
    } catch (Exception $e) {}
    // Si c'est l'ancien format texte (ex: "Vendredi 14h30")
    return htmlspecialchars($str);
}

// ==========================================
// GÉNÉRATEUR DE CONTRAT DE LOCATION (FORMAT COMPLET ET CORRIGÉ)
// ==========================================
if (isset($_GET['print_contrat_salle']) && $peut_valider_salle) {
    $id_resa = (int)$_GET['print_contrat_salle'];
    $stmt = $pdo->prepare("SELECT r.*, COALESCE(r.nom_externe, u.nom) as nom_final, COALESCE(r.prenom_externe, u.prenom) as prenom_final, COALESCE(r.adresse_externe, u.adresse) as adresse_final, COALESCE(r.telephone_externe, '') as tel_final FROM reservations_salle r LEFT JOIN utilisateurs u ON r.utilisateur_id = u.id WHERE r.id = ?");
    $stmt->execute([$id_resa]);
    $resa = $stmt->fetch(PDO::FETCH_ASSOC);

    if ($resa) {
        $check_oui = $resa['vaisselle'] == 1 ? '☒' : '☐';
        $check_non = $resa['vaisselle'] == 0 ? '☒' : '☐';
        $d_debut = date('d/m/Y', strtotime($resa['date_debut']));
        $d_fin = date('d/m/Y', strtotime($resa['date_fin']));
        
        $etat_aller_format = formatDateTimeFr($resa['etat_lieux_aller']);
        $etat_retour_format = formatDateTimeFr($resa['etat_lieux_retour']);
        
        // Blindage des variables : si la case est vide dans la BDD, on affiche des pointillés
        $nom_raw = trim($resa['nom_final']);
        $prenom_raw = trim($resa['prenom_final']);
        $nom_locataire = $nom_raw ? htmlspecialchars($nom_raw) : '……………………………………………………';
        $prenom_locataire = $prenom_raw ? htmlspecialchars($prenom_raw) : '……………………………………………………';
        $adresse_locataire = htmlspecialchars($resa['adresse_final'] ?: '……………………………………………………');
        $telephone_locataire = htmlspecialchars($resa['tel_final'] ?: '……………………………');
        
        $nb_personnes = htmlspecialchars($resa['nb_personnes']);
        $date_jour = date('d/m/Y');
        
        echo "<!DOCTYPE html><html lang='fr'><head><meta charset='UTF-8'><title>Contrat_Location_Salle_Des_Fetes.pdf</title>";
        echo "<style>
                @page { size: A4; margin: 1.5cm 2cm; }
                body { font-family: 'Times New Roman', Times, serif; line-height: 1.4; color: #000; font-size: 11pt; background: #fff; margin: 0; padding: 0; }
                h1 { text-align: center; font-size: 14pt; font-weight: bold; margin: 15px 0; text-decoration: underline; text-transform: uppercase; }
                .entete { text-align: left; font-size: 11pt; margin-bottom: 20px; line-height: 1.2; font-weight: bold; }
                .champ { margin-bottom: 6px; }
                .article { margin-top: 10px; text-align: justify; }
                .article-titre { text-decoration: underline; font-weight: bold; font-size: 11pt; display: block; margin-bottom: 3px; }
                
                /* Ce bloc empêche la date de se séparer des signatures */
                .keep-together { page-break-inside: avoid; margin-top: 30px; }
                
                .closing-area { text-align: right; font-size: 11pt; font-weight: bold; margin-bottom: 20px; }
                .signature-section { display: flex; justify-content: space-between; }
                .signature-box-left { width: 45%; text-align: left; line-height: 1.5; }
                .signature-box-right { width: 45%; text-align: right; padding-right: 40px; }
                @media print { body { padding: 0; } }
              </style></head><body onload='window.print()'>";
        
        echo "<div class='entete'>
                DEPARTEMENT DE LA SOMME<br>
                ---------------------------------<br>
                COMMUNE DE SAINT VAST EN CHAUSSEE (80310)<br>
                03.22.51.41.80<br>
                Fax. 03.22.48.26.44<br>
                E-Mail : mairie.stvastenchaussee@wanadoo.fr
              </div>";
        
        echo "<h1>CONTRAT DE LOCATION<br>DE LA SALLE DES FETES</h1>";
        
        echo "<div class='champ'>Nom : <strong>$nom_locataire</strong></div>";
        echo "<div class='champ'>Prénom : <strong>$prenom_locataire</strong></div>";
        echo "<div class='champ'>Adresse : <strong>$adresse_locataire</strong></div>";
        echo "<div class='champ'>Date de la location : <strong>du $d_debut au $d_fin</strong></div>";
        echo "<div class='champ'>Nombre de personnes : <strong>$nb_personnes</strong></div>";
        echo "<div class='champ'>Location vaisselle (1 € par personne) : OUI <strong>$check_oui</strong> &nbsp;&nbsp;&nbsp; NON <strong>$check_non</strong></div>";
        echo "<div class='champ'>Date de l'état des lieux : Aller : <strong>$etat_aller_format</strong></div>";
        echo "<div class='champ'>Retour : <strong>$etat_retour_format</strong></div>";
        
        echo "<div class='article'>
                <span class='article-titre'>ARTICLE 1 : GENERALITES :</span>
                La gestion de la salle des fêtes, propriété de la commune de Saint-Vast-en-Chaussée, est assurée par ladite commune.<br>
                Dans les articles suivants, la Commune de Saint-Vast-en-Chaussée sera désignée par ce terme : LE PROPRIETAIRE<br>
                Les locataires ou utilisateurs seront désignés par ce terme : L’OCCUPANT.<br>
                Sous réserve de disponibilité, la mise à disposition de la salle est accordée en priorité aux associations de Saint-Vast-En-Chaussée, déclarées en Préfecture, et reconnues ainsi qu’aux particuliers de Saint-Vast-en-Chaussée.<br>
                La salle des fêtes pourra être louée à des particuliers, sociétés, associations Loi 1901 pour des réunions, cérémonies et réceptions à caractères public ou privé, après accord de Monsieur le Maire ou de son représentant.<br>
                Monsieur le Maire, ou son représentant, usant de son pouvoir de police municipal, peut refuser la location de la salle s’il juge que la réunion ou la cérémonie qui doit s’y tenir est de nature à porter atteinte aux bonnes mœurs, à la santé ou à la sécurité des personnes et des biens, ou à troubler l’ordre public.<br>
                Pour les mêmes raisons, Monsieur le Maire ou son représentant pourra mettre fin à toute réunion qui dégénèrerait, faire évacuer la salle et s’il est nécessaire, requérir l’aide des forces de l’ordre.<br>
                La location s’entend du : VENDREDI APRES-MIDI 14H30 Au LUNDI MATIN 9H00.<br>
                Les différents horaires indiqués dans le présent contrat doivent impérativement être respectés.
              </div>";
        
        echo "<div class='article'>
                <span class='article-titre'>ARTICLE 2 : DESCRIPTION DES LOCAUX :</span>
                - Une salle d’une capacité de 50 personnes avec sanitaires et hall d’entrée (vestiaire)
              </div>";
        
        echo "<div class='article'>
                <span class='article-titre'>ARTICLE 3 : RESERVATION – FIXATION DU PRIX DES LOCATIONS :</span>
                La réservation devra s’effectuer auprès du secrétariat de mairie, aux heures d’ouverture de celui-ci.<br>
                Aucune réservation ne sera prise en considération 6 mois avant la date d’utilisation.<br>
                La réservation devient effective après la signature du présent contrat accompagné des pièces listées à l’article 4. Les réservations seront prises dans l’ordre d’arrivée.<br>
                Les prix des locations sont fixés par délibération du Conseil Municipal. Ils peuvent être révisés chaque année et communiqués sur demande. Ils sont applicables à la date d’utilisation quelle que soit la date de réservation.<br>
                Tarif été du 01/04 au 30/09 + ménage inclus : 250 euros<br>
                Tarif hiver du 01/10 au 31/03 + ménage inclus : 350 euros<br>
                Le Conseil Municipal déterminera les cas de gratuité.
              </div>";
        
        echo "<div class='article'>
                <span class='article-titre'>ARTICLE 4 : DOCUMENTS A FOURNIR POUR LA RESERVATION :</span>
                Lors de la réservation, l’occupant devra fournir au propriétaire :<br>
                - un chèque de caution d’un montant de 400 € établi à l’ordre du Trésor Public<br>
                - l’avis de paiement sera adressé à l’occupant par la Trésorerie d’Amiens (Tarif été 250 € - Tarif hiver 350 € - location vaisselle 1€ / personne)<br>
                En cas de non-respect du présent règlement, tout ou partie de cette caution sera conservée.<br>
                En cas de crédit, le chèque de caution sera encaissé et restera acquis à la commune, sauf cas de force majeure justifié par écrit (maladie, décès, etc…)<br>
                Une attestation d’assurance de responsabilité civile couvrant les risques inhérents à la location. Cette attestation devra mentionner explicitement la couverture de ces risques pour la période de location indiquée.<br>
                Le locataire étant civilement responsable des dégâts causés par un incendie dû à une imprudence, à une malveillance ou à une faute d’utilisation des installations mises à sa disposition. Il est également responsable du dégât des eaux qui lui serait imputable.<br>
                En l’absence de dégâts apparents lors de l’inventaire et de l’état des lieux, le chèque de caution sera rendu dans un délai de 15 jours, à reprendre en Mairie. Passé ce délai, le chèque sera détruit.
              </div>";
        
        echo "<div class='article'>
                <span class='article-titre'>ARTICLE 5 : REMISE DES CLES - ETAT DES LIEUX :</span>
                Lors de la remise des clés, en début ou en fin de location, Monsieur le Maire ou son représentant procèdera, avec le locataire, à une visite d’état des lieux.<br>
                Le locataire est formellement responsable des clés qui lui sont confiées. En cas de perte, il les remboursera et supportera éventuellement le coût du remplacement des serrures dû à la perte des clés.<br>
                Il est strictement interdit d’effectuer des copies des clés prêtées sous peine de poursuites.<br>
                Après utilisation de la salle, les clés seront remises en mains propres au représentant communal contre décharge. La caution ne sera alors restituée que si aucun dégât n’a été signalé ou constaté. Dans le cas contraire, elle ne sera restituée qu’après paiement des frais occasionnés.
              </div>";
        
        echo "<div class='article'>
                <span class='article-titre'>ARTICLE 6 : RESTITUTION DES LOCAUX – NETTOYAGE – DECHETS - POUBELLES :</span>
                Le locataire laissera les lieux dans un minimum d’état de propreté. Dans le cas de la location de la vaisselle, celle-ci devra être rendue propre.<br>
                Le matériel sera rangé aux endroits prévus. Le tout étant prêt pour une autre utilisation.<br>
                Les abords (parkings, espaces verts) devront être débarrassés de tous papiers, détritus, verres, boîtes métalliques, mégots.<br>
                Les verres perdus devront être déposés dans les containers prévus à cet effet, et les poubelles intérieures seront impérativement vidées et nettoyées, leur contenu emporté par l’occupant, et les déchets triés selon les consignes de tri fournies.<br>
                Le locataire s’engage à rembourser tout objet manquant ou détérioré. Toute réparation du matériel qui serait due à une faute d’utilisation du locataire lui sera facturée. Toute dissimulation lui sera sanctionnée doublement.<br>
                En quittant les lieux, l’occupant s’assurera de la fermeture de toutes les portes donnant sur l’intérieur et l’extérieur, éteindra les lumières.
              </div>";
        
        echo "<div class='article'>
                <span class='article-titre'>ARTICLE 7 – INTERDICTIONS – BRUIT :</span>
                Il est formellement interdit :<br>
                - De fumer à l’intérieur des locaux<br>
                - D’introduire ou de consommer à l’intérieur des locaux des produits prohibés ou répréhensibles<br>
                - De pratiquer des activités répréhensibles et non autorisées par la Loi<br>
                - De décorer les locaux par clouage, vissage ou collage<br>
                - De graver des inscriptions sur les murs intérieurs et extérieurs<br>
                - De jouer au football sur le terrain d’honneur<br>
                Il est rappelé qu’à partir de 22H00, les riverains sont en droit de jouir d’un sommeil calme et paisible. Les utilisateurs de la salle veilleront à baisser le niveau sonore de leurs amplificateurs à partir de cette heure.
              </div>";
        
        echo "<div class='article'>
                <span class='article-titre'>ARTICLE 8 – ACCEPTATION DU REGLEMENT :</span>
                Le locataire qui n’aura pas respecté les consignes d’utilisation et de nettoyage faisant l’objet du présent règlement pourrait se voir refuser toute nouvelle demande de location.<br>
                Le locataire certifie avoir pris connaissance des consignes générales et particulières de sécurité, ainsi que des éventuelles consignes particulières données par le propriétaire, et s’engage à les respecter.<br>
                La commune se réserve le droit de modifier le présent règlement à tout moment.
              </div>";
        
        echo "<div class='article'>
                <span class='article-titre'>ARTICLE 9 – TARIFS DE MISE A DISPOSITION DES LOCAUX :</span>
                La fourniture d’énergie (chauffage, eau chaude, électricité, éclairage) est une prestation inclue dans les prix de location. Toute utilisation de système de chauffage autre ou complémentaire est donc formellement interdite.
              </div>";
        
        echo "<div class='article'>
                <span class='article-titre'>ARTICLE 10 – REVISION :</span>
                La commune se réserve le droit de modifier le présent règlement à tout moment.<br>
                La commune de Saint-Vast-en-Chaussée espère vous donner satisfaction et vous remercie de la confiance que vous lui témoignez. Nous vous souhaitons un bon amusement.
              </div>";
        
        // Le bloc magique qui force les signatures et le "Fait à" sur la même page
        echo "<div class='keep-together'>";
        
        echo "<div class='closing-area'>Fait à ST. VAST EN CHAUSSEE, le <strong>$date_jour</strong></div>";
        
        echo "<div class='signature-section'>";
        echo "<div class='signature-box-left'>
                <strong>Le locataire,</strong><br>
                Lu et approuvé,<br><br>
                Nom : <strong>$nom_locataire</strong><br>
                Prénom : <strong>$prenom_locataire</strong><br>
                Adresse : <strong>$adresse_locataire</strong><br>
                N° téléphone : <strong>$telephone_locataire</strong><br><br><br>
                <em>Signature :</em>
              </div>";
        echo "<div class='signature-box-right'>
                <strong>Le Maire,</strong><br><br><br><br><br><br>
                <em>Signature :</em>
              </div>";
        echo "</div>"; // Fin de signature-section
        
        echo "</div>"; // Fin de keep-together
        
        echo "</body></html>";
        exit();
    }
}

// Création des dossiers images si inexistants
$dossier_images_pret = 'images/pret/';
$dossier_images_objets = 'images/objets_trouves/';
$dossier_images_salle = 'images/resa_salle_communale/';
if (!is_dir($dossier_images_pret)) { @mkdir($dossier_images_pret, 0755, true); }
if (!is_dir($dossier_images_objets)) { @mkdir($dossier_images_objets, 0755, true); }
if (!is_dir($dossier_images_salle)) { @mkdir($dossier_images_salle, 0755, true); }

function traiterImageWebp($file, $dossier) {
    if ($file['error'] !== UPLOAD_ERR_OK) return false;
    $tmp_name = $file['tmp_name'];
    $name = basename($file['name']);
    $size = $file['size'];
    $ext = strtolower(pathinfo($name, PATHINFO_EXTENSION));
    
    if ($size > 10485760) return false;

    $safe_name = preg_replace('/[^a-zA-Z0-9_-]/', '', pathinfo($name, PATHINFO_FILENAME));
    $new_name = uniqid() . '_' . substr($safe_name, 0, 20) . '.webp'; 
    $dest_path = $dossier . $new_name;

    if ($ext === 'webp') {
        if(move_uploaded_file($tmp_name, $dest_path)) return $new_name;
    } elseif (in_array($ext, ['jpg', 'jpeg', 'png'])) {
        if (function_exists('imagecreatefromjpeg')) {
            $img = ($ext === 'png') ? @imagecreatefrompng($tmp_name) : @imagecreatefromjpeg($tmp_name);
            if ($img) {
                if ($ext === 'png') { imagepalettetotruecolor($img); imagealphablending($img, true); imagesavealpha($img, true); }
                imagewebp($img, $dest_path, 80);
                imagedestroy($img);
                return $new_name;
            }
        }
    }
    return false;
}

$message_salle = '';
$type_message_salle = '';

// ==========================================
// ACCÈS PUBLIC : PRÉ-RÉSERVATION (OPTION)
// ==========================================
if (isset($_POST['add_pre_resa_salle'])) {
    $date_debut = $_POST['pre_date_debut'];
    $date_fin = $_POST['pre_date_fin'];
    $nb_personnes = (int)$_POST['pre_nb_personnes'];
    $vaisselle = isset($_POST['pre_vaisselle']) ? 1 : 0;
    
    $nom = trim($_POST['pre_nom']);
    $prenom = trim($_POST['pre_prenom']);
    $email = trim($_POST['pre_mail']);
    $telephone = trim($_POST['pre_telephone']);
    $adresse = trim($_POST['pre_adresse']);
    $uid = $_SESSION['user_id'] ?? null;
    
    $stmt_check = $pdo->prepare("SELECT COUNT(*) FROM reservations_salle WHERE statut = 'Validée' AND (date_debut <= ? AND date_fin >= ?)");
    $stmt_check->execute([$date_fin, $date_debut]);
    
    if ($stmt_check->fetchColumn() > 0) {
        $message_salle = "⚠️ Impossible de poser une option : la salle est déjà définitivement louée et réglée sur cette période.";
        $type_message_salle = "erreur";
    } else {
        $stmt_insert = $pdo->prepare("INSERT INTO reservations_salle (date_debut, date_fin, utilisateur_id, nom_externe, prenom_externe, adresse_externe, telephone_externe, mail_externe, paiement_acquitte, statut, nb_personnes, vaisselle) VALUES (?, ?, ?, ?, ?, ?, ?, ?, 0, 'En attente', ?, ?)");
        $stmt_insert->execute([$date_debut, $date_fin, $uid, $nom, $prenom, $adresse, $telephone, $email, $nb_personnes, $vaisselle]);
        
        if (!empty($email)) {
            $sujet = "Votre option sur la Salle Communale";
            $headers = "From: ne-pas-repondre@saintvaastenchaussee.fr\r\nContent-Type: text/plain; charset=utf-8\r\n";
            $corps = "Bonjour $prenom $nom,\n\n"
                   . "Vous venez de mettre une option sur la salle pour les dates du " . date('d/m/Y', strtotime($date_debut)) . " au " . date('d/m/Y', strtotime($date_fin)) . ".\n\n"
                   . "Sachez que votre réservation ne pourra être confirmée et vos dates bloquées que lorsque vous serez passé en mairie pour la valider (signature du contrat et règlement).\n\n"
                   . "Cordialement,\nLa Mairie de Saint-Vaast-en-Chaussée";
            @mail($email, $sujet, $corps, $headers);
        }
        $d_fr = date('d/m/Y', strtotime($date_debut));
        $f_fr = date('d/m/Y', strtotime($date_fin));
        $message_salle = "Vous venez de mettre une option sur la salle pour les dates du $d_fr au $f_fr, sachez que votre réservation ne pourra être confirmée et vos dates bloquées que lorsque vous serez passé en mairie pour la valider.";
        $type_message_salle = "succes";
    }
}

// Fonction centrale d'annulation automatique
function triggerConflitsPreReservations($debut, $fin, $exclude_id, $pdo) {
    $sql = "SELECT r.id, COALESCE(r.mail_externe, u.email) as email_contact, r.date_debut, r.date_fin 
            FROM reservations_salle r 
            LEFT JOIN utilisateurs u ON r.utilisateur_id = u.id 
            WHERE r.statut = 'En attente' AND (r.date_debut <= ? AND r.date_fin >= ?)";
    if ($exclude_id) { $sql .= " AND r.id != " . (int)$exclude_id; }
    
    $stmt = $pdo->prepare($sql);
    $stmt->execute([$fin, $debut]);
    $conflits = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    foreach ($conflits as $conf) {
        $pdo->prepare("UPDATE reservations_salle SET statut = 'Annulée' WHERE id = ?")->execute([$conf['id']]);
        if (!empty($conf['email_contact'])) {
            $sujet = "Annulation de votre option - Salle communale";
            $headers = "From: ne-pas-repondre@saintvaastenchaussee.fr\r\nContent-Type: text/plain; charset=utf-8\r\n";
            $corps = "Bonjour,\n\nVous aviez posé une option pour la salle communale pour la période du " . date('d/m/Y', strtotime($conf['date_debut'])) . " au " . date('d/m/Y', strtotime($conf['date_fin'])) . ".\n\nNous vous informons qu'un autre usager a validé son dossier et réglé la location directement en mairie pour ces mêmes dates. Votre option a été annulée.\n\nCordialement,\nLa Mairie de Saint-Vaast-en-Chaussée";
            @mail($conf['email_contact'], $sujet, $corps, $headers);
        }
    }
}

// ==========================================
// TRAITEMENTS CRUD (RÉSERVÉS AUX PRIVILÉGIÉS)
// ==========================================
if ($est_privilegie) {
    // --- GESTION PRÊTS ---
    if (isset($_POST['add_materiel'])) {
        $nom = trim($_POST['nom_materiel']);
        $quantite = (int)$_POST['quantite_materiel'];
        $conseils = trim($_POST['conseils_materiel']); 
        $image_name = 'default.jpg';
        if (!empty($_FILES['image_materiel']['name'])) {
            $uploaded_img = traiterImageWebp($_FILES['image_materiel'], $dossier_images_pret);
            if ($uploaded_img) $image_name = $uploaded_img;
        }
        if (!empty($nom) && $quantite > 0) $pdo->prepare("INSERT INTO materiel_pret (nom, quantite_totale, conseils, image) VALUES (?, ?, ?, ?)")->execute([$nom, $quantite, $conseils, $image_name]);
    }

    if (isset($_POST['edit_materiel_id'])) {
        $id = (int)$_POST['edit_materiel_id'];
        $nom = trim($_POST['edit_nom_materiel']);
        $quantite = (int)$_POST['edit_quantite_materiel'];
        $conseils = trim($_POST['edit_conseils_materiel']); 
        if (!empty($_FILES['edit_image_materiel']['name'])) {
            $uploaded_img = traiterImageWebp($_FILES['edit_image_materiel'], $dossier_images_pret);
            if ($uploaded_img) {
                $old = $pdo->query("SELECT image FROM materiel_pret WHERE id = $id")->fetchColumn();
                if ($old && $old != 'default.jpg' && file_exists($dossier_images_pret . $old)) { @unlink($dossier_images_pret . $old); }
                $pdo->prepare("UPDATE materiel_pret SET nom = ?, quantite_totale = ?, conseils = ?, image = ? WHERE id = ?")->execute([$nom, $quantite, $conseils, $uploaded_img, $id]);
            }
        } else {
            $pdo->prepare("UPDATE materiel_pret SET nom = ?, quantite_totale = ?, conseils = ? WHERE id = ?")->execute([$nom, $quantite, $conseils, $id]);
        }
    }

    if (isset($_POST['delete_materiel_id'])) {
        $id = (int)$_POST['delete_materiel_id'];
        $old = $pdo->query("SELECT image FROM materiel_pret WHERE id = $id")->fetchColumn();
        if ($old && $old != 'default.jpg' && file_exists($dossier_images_pret . $old)) { @unlink($dossier_images_pret . $old); }
        $pdo->prepare("DELETE FROM materiel_pret WHERE id = ?")->execute([$id]);
    }

    // --- GESTION OBJETS TROUVÉS ---
    if (isset($_POST['add_objet'])) {
        $titre = trim($_POST['titre_objet']);
        $description = trim($_POST['description_objet']);
        $lieu = trim($_POST['lieu_objet']);
        $image_name = 'default.jpg';
        if (!empty($_FILES['image_objet']['name'])) {
            $uploaded_img = traiterImageWebp($_FILES['image_objet'], $dossier_images_objets);
            if ($uploaded_img) $image_name = $uploaded_img;
        }
        if (!empty($titre)) $pdo->prepare("INSERT INTO objets_trouves (titre, description, lieu, image) VALUES (?, ?, ?, ?)")->execute([$titre, $description, $lieu, $image_name]);
    }

    if (isset($_POST['edit_objet_id'])) {
        $id = (int)$_POST['edit_objet_id'];
        $titre = trim($_POST['edit_titre_objet']);
        $description = trim($_POST['description_objet']);
        $lieu = trim($_POST['edit_lieu_objet']);
        if (!empty($_FILES['edit_image_objet']['name'])) {
            $uploaded_img = traiterImageWebp($_FILES['edit_image_objet'], $dossier_images_objets);
            if ($uploaded_img) {
                $old = $pdo->query("SELECT image FROM objets_trouves WHERE id = $id")->fetchColumn();
                if ($old && $old != 'default.jpg' && file_exists($dossier_images_objets . $old)) { @unlink($dossier_images_objets . $old); }
                $pdo->prepare("UPDATE objets_trouves SET titre = ?, description = ?, lieu = ?, image = ? WHERE id = ?")->execute([$titre, $description, $lieu, $uploaded_img, $id]);
            }
        } else {
            $pdo->prepare("UPDATE objets_trouves SET titre = ?, description = ?, lieu = ? WHERE id = ?")->execute([$titre, $description, $lieu, $id]);
        }
    }

    if (isset($_POST['restituer_objet_id'])) {
        $pdo->prepare("UPDATE objets_trouves SET statut = 'Restitué', date_restitution = NOW() WHERE id = ?")->execute([(int)$_POST['restituer_objet_id']]);
    }

    if (isset($_POST['delete_objet_id'])) {
        $id = (int)$_POST['delete_objet_id'];
        $old = $pdo->query("SELECT image FROM objets_trouves WHERE id = $id")->fetchColumn();
        if ($old && $old != 'default.jpg' && file_exists($dossier_images_objets . $old)) { @unlink($dossier_images_objets . $old); }
        $pdo->prepare("DELETE FROM objets_trouves WHERE id = ?")->execute([$id]);
    }

    // --- GESTION SALLE COMMUNALE ---
    if (isset($_POST['add_resa_salle'])) {
        $date_debut = $_POST['date_debut_salle'];
        $date_fin = $_POST['date_fin_salle'];
        $nb_personnes = (int)$_POST['nb_personnes_salle'];
        $vaisselle = isset($_POST['vaisselle_salle']) ? 1 : 0;
        $etat_aller = $_POST['etat_lieux_aller'];
        $etat_retour = $_POST['etat_lieux_retour'];
        $paiement = isset($_POST['paiement_acquitte']) ? 1 : 0;
        $est_non_inscrit = isset($_POST['non_inscrit_salle']) ? 1 : 0;
        $image_name = 'default.jpg';

        if (!empty($_FILES['piece_identite']['name'])) {
            $uploaded_img = traiterImageWebp($_FILES['piece_identite'], $dossier_images_salle);
            if ($uploaded_img) $image_name = $uploaded_img;
        }

        if ($est_non_inscrit) {
            $pdo->prepare("INSERT INTO reservations_salle (date_debut, date_fin, nom_externe, prenom_externe, adresse_externe, telephone_externe, mail_externe, paiement_acquitte, piece_identite, statut, nb_personnes, vaisselle, etat_lieux_aller, etat_lieux_retour) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 'Validée', ?, ?, ?, ?)")
                ->execute([$date_debut, $date_fin, trim($_POST['nom_salle']), trim($_POST['prenom_salle']), trim($_POST['adresse_salle']), trim($_POST['telephone_salle']), trim($_POST['mail_salle']), $paiement, $image_name, $nb_personnes, $vaisselle, $etat_aller, $etat_retour]);
        } else {
            // Même si c'est un habitant inscrit, on capture son téléphone et adresse depuis le formulaire pour le contrat
            $pdo->prepare("INSERT INTO reservations_salle (date_debut, date_fin, utilisateur_id, adresse_externe, telephone_externe, paiement_acquitte, piece_identite, statut, nb_personnes, vaisselle, etat_lieux_aller, etat_lieux_retour) VALUES (?, ?, ?, ?, ?, ?, ?, 'Validée', ?, ?, ?, ?)")
                ->execute([$date_debut, $date_fin, (int)$_POST['utilisateur_id_salle'], trim($_POST['adresse_salle']), trim($_POST['telephone_salle']), $paiement, $image_name, $nb_personnes, $vaisselle, $etat_aller, $etat_retour]);
        }
        triggerConflitsPreReservations($date_debut, $date_fin, null, $pdo);
        $message_salle = "✅ Réservation confirmée et bloquée !"; $type_message_salle = "succes";
    }

    if ($peut_valider_salle && isset($_POST['action_valider_pre_resa'])) {
        $id_resa = (int)$_POST['id_resa_validation'];
        $stmt_info = $pdo->prepare("SELECT r.*, COALESCE(r.mail_externe, u.email) as email_dest FROM reservations_salle r LEFT JOIN utilisateurs u ON r.utilisateur_id = u.id WHERE r.id = ?");
        $stmt_info->execute([$id_resa]);
        $resa_info = $stmt_info->fetch(PDO::FETCH_ASSOC);
        
        if ($resa_info) {
            $pdo->prepare("UPDATE reservations_salle SET statut = 'Validée', paiement_acquitte = 1 WHERE id = ?")->execute([$id_resa]);
            triggerConflitsPreReservations($resa_info['date_debut'], $resa_info['date_fin'], $id_resa, $pdo);
            $message_salle = "✅ Pré-réservation validée. (Pensez à cliquer sur 'Modifier' pour ajouter les dates d'état des lieux et éditer le contrat).";
            $type_message_salle = "succes";
        }
    }

    if (isset($_POST['edit_resa_id'])) {
        $id = (int)$_POST['edit_resa_id'];
        $date_debut = $_POST['edit_date_debut_salle'];
        $date_fin = $_POST['edit_date_fin_salle'];
        $nb_personnes = (int)$_POST['edit_nb_personnes'];
        $vaisselle = isset($_POST['edit_vaisselle']) ? 1 : 0;
        $etat_aller = $_POST['edit_etat_lieux_aller'];
        $etat_retour = $_POST['edit_etat_lieux_retour'];
        $paiement = isset($_POST['edit_paiement_acquitte']) ? 1 : 0;
        $statut_edit = $_POST['edit_statut_salle'] ?? 'Validée';

        if (!empty($_FILES['edit_piece_identite']['name'])) {
            $uploaded_img = traiterImageWebp($_FILES['edit_piece_identite'], $dossier_images_salle);
            if ($uploaded_img) {
                $old = $pdo->query("SELECT piece_identite FROM reservations_salle WHERE id = $id")->fetchColumn();
                if ($old && $old != 'default.jpg' && file_exists($dossier_images_salle . $old)) { @unlink($dossier_images_salle . $old); }
                $pdo->prepare("UPDATE reservations_salle SET date_debut=?, date_fin=?, paiement_acquitte=?, piece_identite=?, statut=?, nb_personnes=?, vaisselle=?, etat_lieux_aller=?, etat_lieux_retour=? WHERE id=?")->execute([$date_debut, $date_fin, $paiement, $uploaded_img, $statut_edit, $nb_personnes, $vaisselle, $etat_aller, $etat_retour, $id]);
            }
        } else {
            $pdo->prepare("UPDATE reservations_salle SET date_debut=?, date_fin=?, paiement_acquitte=?, statut=?, nb_personnes=?, vaisselle=?, etat_lieux_aller=?, etat_lieux_retour=? WHERE id=?")->execute([$date_debut, $date_fin, $paiement, $statut_edit, $nb_personnes, $vaisselle, $etat_aller, $etat_retour, $id]);
        }
        if ($statut_edit === 'Validée') { triggerConflitsPreReservations($date_debut, $date_fin, $id, $pdo); }
    }

    if (isset($_POST['delete_resa_id'])) {
        $id = (int)$_POST['delete_resa_id'];
        $old = $pdo->query("SELECT piece_identite FROM reservations_salle WHERE id = $id")->fetchColumn();
        if ($old && $old != 'default.jpg' && file_exists($dossier_images_salle . $old)) { @unlink($dossier_images_salle . $old); }
        $pdo->prepare("DELETE FROM reservations_salle WHERE id = ?")->execute([$id]);
    }
}
?>
<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Services - Saint-Vaast-en-Chaussée</title>
    <link rel="stylesheet" href="css/global.css">
    <style>
        .grille-cartes { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 20px; padding-top: 10px; }
        .carte { background-color: #fff; border: 1px solid #e0e0e0; border-radius: 10px; overflow: hidden; box-shadow: 0 2px 8px rgba(0,0,0,0.05); display: flex; flex-direction: column; }
        a.carte-lien:hover { transform: translateY(-5px); }
        .carte:hover { box-shadow: 0 8px 16px rgba(0,0,0,0.15); }
        .carte-lien { text-decoration: none; color: #333; display: flex; flex-direction: column; flex-grow: 1; transition: transform 0.2s ease; }
        .carte-lien-inactif { cursor: default; } 
        .carte img { width: 100%; height: 140px; object-fit: contain; background-color: #ffffff; border-bottom: 1px solid #eee; display: block; padding: 5px; box-sizing: border-box; }
        .carte-contenu { background-color: #fafafa; display: flex; flex-direction: column; padding: 10px; flex-grow: 1; }
        .carte h3 { margin: 0 0 8px 0; font-size: 1.05em; color: #333; text-align: center; }
        .badge { display: inline-block; padding: 4px 12px; border-radius: 20px; font-size: 0.85em; font-weight: bold; margin-top: 5px; text-align: center; }
        .bg-vert { background-color: #e1ede0; color: #28a745; border: 1px solid #c8e6c9; }
        .bg-rouge { background-color: #fdeaea; color: #dc3545; border: 1px solid #f5c6cb; }
        .bg-orange { background-color: #fff3cd; color: #856404; border: 1px solid #ffeeba; }
        .carte-actions { display: flex; justify-content: center; padding: 8px 12px; background-color: #fff; border-top: 1px solid #eee; gap: 8px; flex-wrap: wrap; }
        
        .header-section { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; flex-wrap: wrap; gap: 10px; }
        .btn-ajouter { background-color: var(--nature-vert, #28a745); color: white; padding: 8px 16px; border: none; border-radius: 8px; font-weight: bold; cursor: pointer; transition: 0.3s; }
        .msg-avertissement { background-color: #fff3cd; color: #856404; padding: 15px; border-radius: 8px; border: 1px solid #ffeeba; font-weight: bold; width: 100%; box-sizing: border-box; text-align: center; margin-bottom: 20px; font-size: 1em; }

        .modal { display: none; position: fixed; z-index: 1000; left: 0; top: 0; width: 100%; height: 100%; background-color: rgba(0,0,0,0.5); align-items: center; justify-content: center; }
        .modal-content { background-color: #fff; padding: 25px; border-radius: 15px; width: 90%; max-width: 600px; position: relative; max-height: 90vh; overflow-y: auto; }
        .modal-content h2 { margin-top: 0; }
        .close-btn { position: absolute; top: 15px; right: 20px; font-size: 24px; cursor: pointer; color: #aaa; }
        .form-group { margin-bottom: 15px; }
        .form-group label { display: block; margin-bottom: 5px; font-weight: bold; }
        .form-group input, .form-group textarea, .form-group select { width: 100%; padding: 10px; border: 1px solid #ccc; border-radius: 8px; box-sizing: border-box; font-family: inherit; }
        .form-grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 15px; } 
        .btn-submit { background-color: var(--nature-vert, #0066cc); color: white; padding: 10px 15px; border: none; border-radius: 8px; cursor: pointer; width: 100%; font-weight: bold; font-size: 1.1em; }

        .tabs-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; }
        .tabs-container { width: 100%; overflow: hidden; }
        .tabs { display: flex; gap: 10px; margin: 0; padding: 0; }
        .tab-btn { background-color: #f0f0f0; border: 1px solid #ddd; padding: 10px 20px; cursor: pointer; border-radius: 8px; font-weight: bold; color: #555; transition: 0.3s; white-space: nowrap; }
        .tab-btn:hover { background-color: #e0e0e0; }
        .tab-btn.active { background-color: var(--nature-vert, #4a7c44); color: white; border-color: var(--nature-vert, #4a7c44); }

        @media (max-width: 768px) {
            .tabs-header { flex-direction: column; align-items: flex-start; gap: 15px;}
            .tabs-container { -webkit-mask-image: linear-gradient(to right, transparent 0%, black 10%, black 90%, transparent 100%); mask-image: linear-gradient(to right, transparent 0%, black 10%, black 90%, transparent 100%); padding: 5px 0; }
            .tabs { overflow-x: auto; flex-wrap: nowrap; scroll-behavior: smooth; -webkit-overflow-scrolling: touch; padding: 0 15%; scrollbar-width: none; -ms-overflow-style: none; }
            .tabs::-webkit-scrollbar { display: none; }
            .tab-btn { flex: 0 0 auto; }
        }
        
        /* Styles CSS Calendrier injectés ici */
        .img-zoom-modal { display: none; position: fixed; z-index: 3000; left: 0; top: 0; width: 100%; height: 100%; background-color: rgba(0,0,0,0.8); justify-content: center; align-items: center; }
        .img-zoom-content { max-width: 90%; max-height: 90%; border-radius: 10px; box-shadow: 0 4px 15px rgba(0,0,0,0.3); cursor: zoom-out; }
        .btn-gestion-attente { background-color: #e67e22; color: white; padding: 10px 15px; border: none; border-radius: 8px; font-weight: bold; cursor: pointer; transition: 0.3s; }
        .btn-gestion-attente:hover { background-color: #d35400; }
        
        .calendrier-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 5px; text-align: center; margin-bottom: 20px; }
        .cal-header { font-weight: bold; background: #eee; padding: 8px 2px; border-radius: 5px; font-size: 0.85em; }
        .cal-jour { background: #fff; border: 1px solid #ddd; padding: 10px 2px; border-radius: 5px; min-height: 45px; display: flex; align-items: center; justify-content: center; font-weight: bold; cursor: default; transition: 0.2s; font-size: 0.9em; }
        .cal-libre { background: #e1ede0; color: #28a745; cursor: pointer; border-color: #c8e6c9; }
        .cal-libre:hover { background: #c8e6c9; }
        .cal-occupe { background: #fdeaea; color: #dc3545; cursor: default; border-color: #f5c6cb; }
        .cal-attente { background: #fff3cd; color: #856404; cursor: pointer; border-color: #ffeeba; }
        .cal-attente:hover { background: #ffeeba; }
        .cal-vide { background: transparent; border: none; }
        .cal-nav { display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px; }
        .cal-nav button { background: #607d8b; color: white; border: none; padding: 8px 15px; border-radius: 5px; cursor: pointer; font-weight: bold; }
        
        .reglement-box { max-height: 400px; overflow-y: auto; background: #f9fbf9; padding: 15px; border-radius: 8px; border: 1px solid #e1ede0; font-size: 0.9em; line-height: 1.5; color: #333; }
        .reglement-box h4 { margin-top: 15px; margin-bottom: 5px; color: #4a7c44; text-decoration: underline; }
    </style>
</head>
<body>

    <div class="site-container">
        <img src="images/banniere.png" alt="Bannière" class="banner-img">
        <nav><?php include 'includes/menu.php'; ?></nav>

        <main class="main-wrapper">
            <div class="tabs-header">
                <div class="tabs-container">
                    <div class="tabs">
                        <button class="tab-btn active" onclick="openTab(event, 'prets')">Prêts matériel</button>
                        <button class="tab-btn" onclick="openTab(event, 'salles')">Salles communales</button>
                        <button class="tab-btn" onclick="openTab(event, 'objets')">Objets trouvés</button>
                    </div>
                </div>
                
                <?php if(isset($_SESSION['nom'])): ?>
                    <span class="user-badge" style="white-space: nowrap; margin-top: 10px;">
                        Bonjour, <?php echo htmlspecialchars(trim(($_SESSION['prenom'] ?? '') . ' ' . $_SESSION['nom']), ENT_QUOTES, 'UTF-8'); ?>
                    </span>
                <?php endif; ?>
            </div>

            <div class="content-scroll">
                <div id="prets" class="tab-content active"><?php include 'onglets/prets_materiel.php'; ?></div>
                <div id="salles" class="tab-content" style="display: none;"><?php include 'onglets/salles_communales.php'; ?></div>
                <div id="objets" class="tab-content" style="display: none;"><?php include 'onglets/objets_trouves.php'; ?></div>
            </div>
        </main>
    </div>

    <script>
        function openTab(evt, tabName) {
            document.querySelectorAll(".tab-content").forEach(t => t.style.display = "none");
            document.querySelectorAll(".tab-btn").forEach(b => b.classList.remove("active"));
            document.getElementById(tabName).style.display = "block";
            evt.currentTarget.classList.add("active");
            
            if(tabName === 'salles' && typeof renderCalendar === 'function') {
                renderCalendar();
            }

            if(window.innerWidth <= 768) {
                const tabsContainer = document.querySelector('.tabs');
                const btnClicked = evt.currentTarget;
                const scrollLeft = btnClicked.offsetLeft - (tabsContainer.offsetWidth / 2) + (btnClicked.offsetWidth / 2);
                tabsContainer.scrollTo({ left: scrollLeft, behavior: 'smooth' });
            }
        }
        window.onclick = function(event) { if (event.target.classList.contains('modal')) event.target.style.display = "none"; }
    </script>
</body>
</html>