<?php
// dossier.php
require_once 'includes/auth.php';
require_once 'config/database.php';
require_once 'includes/functions.php';

$dossier_id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
$show_deleted = filter_input(INPUT_GET, 'deleted', FILTER_VALIDATE_BOOLEAN) ? true : false;

if (!$dossier_id) {
    header('Location: dashboard.php');
    exit;
}

$pdo = getPDO();

// Récupérer les infos du dossier
$stmt = $pdo->prepare("SELECT d.*, p.nom as projet_nom, p.id as projet_id 
                       FROM dossiers d 
                       JOIN projets p ON d.projet_id = p.id 
                       WHERE d.id = ?");
$stmt->execute([$dossier_id]);
$dossier = $stmt->fetch();

if (!$dossier) {
    header('Location: dashboard.php');
    exit;
}

// Construire la requête de filtrage
$sql_where = "f.dossier_id = :dossier_id";
$params = [':dossier_id' => $dossier_id];

if (!$show_deleted) {
    $sql_where .= " AND f.deleted_at IS NULL";
} else {
    $sql_where .= " AND f.deleted_at IS NOT NULL";
}

// Filtres de recherche
$filtre_zone = trim($_GET['zone'] ?? '');
$filtre_obs = trim($_GET['observation'] ?? '');
$filtre_type = $_GET['type_reserve'] ?? '';
$filtre_statut = $_GET['statut'] ?? '';
$filtre_createur = $_GET['createur'] ?? '';

if ($filtre_zone !== '') {
    $sql_where .= " AND f.zone LIKE :zone";
    $params[':zone'] = '%' . $filtre_zone . '%';
}
if ($filtre_obs !== '') {
    $sql_where .= " AND f.observation LIKE :obs";
    $params[':obs'] = '%' . $filtre_obs . '%';
}
if ($filtre_type !== '') {
    $sql_where .= " AND f.type_reserve = :type_reserve";
    $params[':type_reserve'] = $filtre_type;
}
if ($filtre_statut !== '') {
    $sql_where .= " AND f.statut = :statut";
    $params[':statut'] = $filtre_statut;
}
if ($filtre_createur !== '') {
    $sql_where .= " AND u.nom LIKE :createur";
    $params[':createur'] = '%' . $filtre_createur . '%';
}

// Requête finale avec jointures
$sql = "SELECT f.*, u.nom as createur_nom, ud.nom as deleted_by_nom
        FROM fiches f
        LEFT JOIN users u ON f.createur_id = u.id
        LEFT JOIN users ud ON f.deleted_by = ud.id
        WHERE $sql_where
        ORDER BY f.date_creation DESC";

$stmt = $pdo->prepare($sql);
$stmt->execute($params);
$fiches = $stmt->fetchAll();

require_once 'includes/header.php';
?>

<div class="d-flex justify-content-between align-items-center mb-4">
    <div>
        <h1><i class="fas fa-folder-open me-2"></i><?= htmlspecialchars($dossier['nom']) ?></h1>
        <p class="text-muted">Projet : <?= htmlspecialchars($dossier['projet_nom']) ?></p>
    </div>
    <div>
        <?php if ($show_deleted): ?>
            <a href="?id=<?= $dossier_id ?>" class="btn btn-outline-primary me-2">
                <i class="fas fa-arrow-left me-2"></i>Retour aux fiches actives
            </a>
        <?php else: ?>
            <a href="?id=<?= $dossier_id ?>&deleted=1" class="btn btn-outline-secondary me-2">
                <i class="fas fa-trash-alt me-2"></i>Voir corbeille
            </a>
        <?php endif; ?>
        <a href="fiche_edit.php?dossier_id=<?= $dossier_id ?>" class="btn btn-success btn-lg">
            <i class="fas fa-plus-circle me-2"></i>Nouvelle fiche
        </a>
    </div>
</div>

<!-- Formulaire de filtres -->
<div class="card mb-4">
    <div class="card-header bg-light">
        <i class="fas fa-filter me-2"></i>Filtres
        <button class="btn btn-sm btn-outline-primary float-end" type="button" data-bs-toggle="collapse" data-bs-target="#filtresCollapse">
            <i class="fas fa-chevron-down"></i>
        </button>
    </div>
    <div class="collapse show" id="filtresCollapse">
        <div class="card-body">
            <form method="get" class="row g-3">
                <input type="hidden" name="id" value="<?= $dossier_id ?>">
                <?php if ($show_deleted): ?>
                    <input type="hidden" name="deleted" value="1">
                <?php endif; ?>

                <div class="col-md-3">
                    <label for="zone" class="form-label">Zone</label>
                    <input type="text" class="form-control" id="zone" name="zone"
                        value="<?= htmlspecialchars($filtre_zone) ?>">
                </div>
                <div class="col-md-3">
                    <label for="observation" class="form-label">Observation</label>
                    <input type="text" class="form-control" id="observation" name="observation"
                        value="<?= htmlspecialchars($filtre_obs) ?>">
                </div>
                <div class="col-md-2">
                    <label for="type_reserve" class="form-label">Type</label>
                    <select class="form-select" id="type_reserve" name="type_reserve">
                        <option value="">Tous</option>
                        <option value="sans_reserve" <?= $filtre_type === 'sans_reserve' ? 'selected' : '' ?>>Sans réserve</option>
                        <option value="avec_reserve" <?= $filtre_type === 'avec_reserve' ? 'selected' : '' ?>>Avec réserve</option>
                    </select>
                </div>
                <div class="col-md-2">
                    <label for="statut" class="form-label">Statut</label>
                    <select class="form-select" id="statut" name="statut">
                        <option value="">Tous</option>
                        <option value="brouillon" <?= $filtre_statut === 'brouillon' ? 'selected' : '' ?>>Brouillon</option>
                        <option value="soumis" <?= $filtre_statut === 'soumis' ? 'selected' : '' ?>>Soumis</option>
                        <option value="valide" <?= $filtre_statut === 'valide' ? 'selected' : '' ?>>Validé</option>
                    </select>
                </div>
                <div class="col-md-2">
                    <label for="createur" class="form-label">Créateur</label>
                    <input type="text" class="form-control" id="createur" name="createur"
                        value="<?= htmlspecialchars($filtre_createur) ?>">
                </div>
                <div class="col-12 text-end">
                    <button type="submit" class="btn btn-primary"><i class="fas fa-search me-2"></i>Filtrer</button>
                    <a href="?id=<?= $dossier_id ?><?= $show_deleted ? '&deleted=1' : '' ?>" class="btn btn-outline-secondary">Réinitialiser</a>
                </div>
            </form>
        </div>
    </div>
</div>

<?php if (empty($fiches)): ?>
    <div class="alert alert-info">
        <i class="fas fa-info-circle me-2"></i>
        <?= $show_deleted ? 'Aucune fiche dans la corbeille.' : 'Aucune fiche dans ce dossier.' ?>
        <?php if (!$show_deleted): ?>
            <a href="fiche_edit.php?dossier_id=<?= $dossier_id ?>">Créez la première fiche</a>.
        <?php endif; ?>
    </div>
<?php else: ?>
    <div class="table-responsive">
        <table class="table table-striped table-hover">
            <thead class="table-dark">
                <tr>
                    <th>N° Fiche</th>
                    <th>Titre</th>
                    <th>Zone</th>
                    <th>Observation</th>
                    <th>Type</th>
                    <th>Statut</th>
                    <th>Créateur</th>
                    <th>Date création</th>
                    <?php if ($show_deleted): ?>
                        <th>Supprimé par</th>
                        <th>Date suppression</th>
                    <?php endif; ?>
                    <th class="text-end">Actions</th>
                </tr>
            </thead>
            <tbody>
                <?php foreach ($fiches as $fiche):
                    $peut_modifier = ($_SESSION['user_role'] === 'admin' || $_SESSION['user_id'] == $fiche['createur_id']);
                    // Pour éviter les erreurs si la colonne type_reserve n'existe pas (mais elle doit exister)
                    $type_reserve = $fiche['type_reserve'] ?? 'sans_reserve'; // valeur par défaut
                ?>
                    <tr data-id="<?= $fiche['id'] ?>" class="<?= $type_reserve === 'avec_reserve' ? 'table-danger' : ($type_reserve === 'sans_reserve' ? 'table-success' : '') ?>">
                        <td><code><?= htmlspecialchars($fiche['numero_fiche']) ?></code></td>
                        <td><?= htmlspecialchars($fiche['titre']) ?></td>

                        <!-- Zone éditable -->
                        <td>
                            <?php if ($peut_modifier && !$show_deleted): ?>
                                <input type="text" class="form-control form-control-sm zone-input"
                                    value="<?= htmlspecialchars($fiche['zone'] ?? '') ?>"
                                    data-id="<?= $fiche['id'] ?>"
                                    data-original="<?= htmlspecialchars($fiche['zone'] ?? '') ?>">
                            <?php else: ?>
                                <?= htmlspecialchars($fiche['zone'] ?? '') ?>
                            <?php endif; ?>
                        </td>

                        <!-- Observation éditable -->
                        <td>
                            <?php if ($peut_modifier && !$show_deleted): ?>
                                <textarea class="form-control form-control-sm observation-input"
                                    rows="2"
                                    data-id="<?= $fiche['id'] ?>"
                                    data-original="<?= htmlspecialchars($fiche['observation'] ?? '') ?>"><?= htmlspecialchars($fiche['observation'] ?? '') ?></textarea>
                            <?php else: ?>
                                <?= nl2br(htmlspecialchars($fiche['observation'] ?? '')) ?>
                            <?php endif; ?>
                        </td>

                        <!-- Type de réserve : affichage du badge avec crayon si modifiable -->
                        <td>
                            <?php if ($peut_modifier && !$show_deleted): ?>
                                <div class="d-flex align-items-center">
                                    <span class="badge <?= $type_reserve === 'sans_reserve' ? 'bg-success' : 'bg-danger' ?> me-2" style="cursor: pointer;" onclick="ouvrirModalType(<?= $fiche['id'] ?>, '<?= $type_reserve ?>', this)">
                                        <?= $type_reserve === 'sans_reserve' ? 'Sans réserve' : 'Avec réserve' ?>
                                    </span>
                                    <i class="fas fa-pencil-alt text-muted" style="cursor: pointer;" onclick="ouvrirModalType(<?= $fiche['id'] ?>, '<?= $type_reserve ?>', this)"></i>
                                </div>
                                <!-- Le select caché pour la modification via AJAX (sera affiché dans un modal ou inline) -->
                                <select class="form-select form-select-sm d-none" id="type-select-<?= $fiche['id'] ?>" data-id="<?= $fiche['id'] ?>" data-original="<?= $type_reserve ?>">
                                    <option value="sans_reserve" <?= $type_reserve === 'sans_reserve' ? 'selected' : '' ?>>Sans réserve</option>
                                    <option value="avec_reserve" <?= $type_reserve === 'avec_reserve' ? 'selected' : '' ?>>Avec réserve</option>
                                </select>
                            <?php else: ?>
                                <span class="badge <?= $type_reserve === 'sans_reserve' ? 'bg-success' : 'bg-danger' ?>">
                                    <?= $type_reserve === 'sans_reserve' ? 'Sans réserve' : 'Avec réserve' ?>
                                </span>
                            <?php endif; ?>
                        </td>

                        <td>
                            <?php
                            $badge_class = match ($fiche['statut']) {
                                'brouillon' => 'bg-secondary',
                                'soumis' => 'bg-warning',
                                'valide' => 'bg-success',
                                default => 'bg-light'
                            };
                            ?>
                            <span class="badge <?= $badge_class ?>"><?= $fiche['statut'] ?></span>
                        </td>
                        <td><?= htmlspecialchars($fiche['createur_nom'] ?? 'N/A') ?></td>
                        <td><?= date('d/m/Y', strtotime($fiche['date_creation'])) ?></td>

                        <?php if ($show_deleted): ?>
                            <td><?= htmlspecialchars($fiche['deleted_by_nom'] ?? 'Inconnu') ?></td>
                            <td><?= $fiche['deleted_at'] ? date('d/m/Y H:i', strtotime($fiche['deleted_at'])) : '' ?></td>
                        <?php endif; ?>

                        <td class="text-end">
                            <div class="btn-group btn-group-sm" role="group">
                                <a href="fiche_view.php?id=<?= $fiche['id'] ?>" class="btn btn-info" title="Voir">
                                    <i class="fas fa-eye"></i>
                                </a>

                                <?php if (!$show_deleted): ?>
                                    <?php if ($peut_modifier): ?>
                                        <a href="fiche_edit.php?id=<?= $fiche['id'] ?>" class="btn btn-warning" title="Modifier">
                                            <i class="fas fa-edit"></i>
                                        </a>
                                    <?php endif; ?>

                                    <a href="generer_pdf.php?id=<?= $fiche['id'] ?>" class="btn btn-secondary" title="Télécharger PDF" target="_blank">
                                        <i class="fas fa-file-pdf"></i>
                                    </a>

                                    <button type="button" class="btn btn-primary" title="Envoyer par email"
                                        onclick="ouvrirModalEmail(<?= $fiche['id'] ?>, '<?= htmlspecialchars($fiche['numero_fiche']) ?>')">
                                        <i class="fas fa-envelope"></i>
                                    </button>

                                    <a href="upload_fichier.php?fiche_id=<?= $fiche['id'] ?>" class="btn btn-success" title="Joindre un fichier">
                                        <i class="fas fa-paperclip"></i>
                                    </a>

                                    <?php if ($peut_modifier): ?>
                                        <a href="fiche_delete.php?id=<?= $fiche['id'] ?>&action=soft" class="btn btn-danger"
                                            onclick="return confirm('Déplacer cette fiche vers la corbeille ?')" title="Corbeille">
                                            <i class="fas fa-trash"></i>
                                        </a>
                                    <?php endif; ?>

                                <?php else: ?>
                                    <!-- Actions pour la corbeille -->
                                    <?php if ($_SESSION['user_role'] === 'admin'): ?>
                                        <a href="fiche_delete.php?id=<?= $fiche['id'] ?>&action=restore" class="btn btn-success"
                                            onclick="return confirm('Restaurer cette fiche ?')" title="Restaurer">
                                            <i class="fas fa-undo"></i>
                                        </a>
                                        <a href="fiche_delete.php?id=<?= $fiche['id'] ?>&action=definitive" class="btn btn-danger"
                                            onclick="return confirm('Supprimer définitivement cette fiche ? Cette action est irréversible.')" title="Supprimer définitivement">
                                            <i class="fas fa-trash-alt"></i>
                                        </a>
                                    <?php endif; ?>
                                <?php endif; ?>
                            </div>
                        </td>
                    </tr>
                <?php endforeach; ?>
            </tbody>
        </table>
    </div>
<?php endif; ?>

<!-- Modal pour choisir le type de réserve -->
<div class="modal fade" id="modalTypeReserve" tabindex="-1" aria-hidden="true">
    <div class="modal-dialog modal-sm">
        <div class="modal-content">
            <div class="modal-header bg-info text-white">
                <h5 class="modal-title"><i class="fas fa-tag me-2"></i>Modifier le type</h5>
                <button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"></button>
            </div>
            <div class="modal-body">
                <input type="hidden" id="modal_fiche_id" value="">
                <div class="d-flex justify-content-around">
                    <button class="btn btn-success" onclick="changerType('sans_reserve')">Sans réserve</button>
                    <button class="btn btn-danger" onclick="changerType('avec_reserve')">Avec réserve</button>
                </div>
            </div>
        </div>
    </div>
</div>

<!-- Modal Envoi Email -->
<div class="modal fade" id="modalEmail" tabindex="-1" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <form action="envoyer_email.php" method="post" enctype="multipart/form-data">
                <div class="modal-header bg-primary text-white">
                    <h5 class="modal-title"><i class="fas fa-envelope me-2"></i>Envoyer la fiche par email</h5>
                    <button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"></button>
                </div>
                <div class="modal-body">
                    <input type="hidden" name="fiche_id" id="email_fiche_id">
                    <div class="mb-3">
                        <label for="email_dest" class="form-label">Destinataire(s)</label>
                        <input type="email" class="form-control" id="email_dest" name="destinataire"
                            placeholder="email@exemple.com" multiple required>
                        <small class="text-muted">Séparez plusieurs adresses par des virgules</small>
                    </div>
                    <div class="mb-3">
                        <label for="email_sujet" class="form-label">Sujet</label>
                        <input type="text" class="form-control" id="email_sujet" name="sujet"
                            value="Fiche d'auto-contrôle CIBER" required>
                    </div>
                    <div class="mb-3">
                        <label for="email_message" class="form-label">Message</label>
                        <textarea class="form-control" id="email_message" name="message" rows="4">Veuillez trouver ci-joint la fiche d'auto-contrôle.</textarea>
                    </div>
                    <div class="mb-3">
                        <label for="email_pj" class="form-label">Pièces jointes supplémentaires</label>
                        <input type="file" class="form-control" id="email_pj" name="pj[]" multiple accept=".pdf,.jpg,.jpeg,.png,.doc,.docx">
                        <small class="text-muted">Vous pouvez joindre plusieurs fichiers (PDF, images, Word)</small>
                    </div>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Annuler</button>
                    <button type="submit" class="btn btn-primary">Envoyer</button>
                </div>
            </form>
        </div>
    </div>
</div>

<script>
    // Variables globales pour le modal type
    let currentFicheId = null;
    let currentElement = null;

    // Ouvrir le modal pour changer le type
    function ouvrirModalType(ficheId, typeActuel, element) {
        currentFicheId = ficheId;
        currentElement = element; // l'élément badge ou crayon cliqué
        var modal = new bootstrap.Modal(document.getElementById('modalTypeReserve'));
        modal.show();
    }

    // Changer le type via AJAX
    function changerType(nouveauType) {
        if (!currentFicheId) return;

        // Fermer le modal
        var modal = bootstrap.Modal.getInstance(document.getElementById('modalTypeReserve'));
        modal.hide();

        // Mise à jour AJAX
        fetch('ajax_update_fiche_field.php', {
            method: 'POST',
            headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
            body: 'id=' + currentFicheId + '&field=type_reserve&value=' + nouveauType
        })
        .then(response => response.json())
        .then(data => {
            if (data.success) {
                // Mettre à jour l'affichage du badge
                const row = document.querySelector(`tr[data-id="${currentFicheId}"]`);
                if (row) {
                    // Mettre à jour la classe de la ligne
                    row.classList.remove('table-success', 'table-danger');
                    row.classList.add(nouveauType === 'sans_reserve' ? 'table-success' : 'table-danger');

                    // Mettre à jour le badge
                    const badgeSpan = row.querySelector('.badge.bg-success, .badge.bg-danger');
                    if (badgeSpan) {
                        badgeSpan.className = 'badge ' + (nouveauType === 'sans_reserve' ? 'bg-success' : 'bg-danger') + ' me-2';
                        badgeSpan.textContent = nouveauType === 'sans_reserve' ? 'Sans réserve' : 'Avec réserve';
                    }

                    // Mettre à jour le select caché
                    const select = document.getElementById('type-select-' + currentFicheId);
                    if (select) {
                        select.value = nouveauType;
                        select.dataset.original = nouveauType;
                    }
                }
            } else {
                alert('Erreur : ' + data.error);
            }
        })
        .catch(error => {
            alert('Erreur réseau');
        });
    }

    // Fonction générique pour mettre à jour un champ (zone, observation)
    function updateField(element, fieldName) {
        const ficheId = element.dataset.id;
        const newValue = element.value;
        const originalValue = element.dataset.original;

        if (newValue === originalValue) return;

        element.disabled = true;

        fetch('ajax_update_fiche_field.php', {
            method: 'POST',
            headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
            body: 'id=' + ficheId + '&field=' + fieldName + '&value=' + encodeURIComponent(newValue)
        })
        .then(response => response.json())
        .then(data => {
            element.disabled = false;
            if (data.success) {
                element.dataset.original = newValue;
                element.style.borderColor = '#28a745';
                setTimeout(() => element.style.borderColor = '', 1000);
            } else {
                alert('Erreur : ' + data.error);
                element.value = originalValue;
            }
        })
        .catch(error => {
            element.disabled = false;
            alert('Erreur réseau');
            element.value = originalValue;
        });
    }

    // Attacher les événements aux champs zone et observation après chargement
    document.addEventListener('DOMContentLoaded', function() {
        // Pour les champs zone
        document.querySelectorAll('.zone-input').forEach(input => {
            input.addEventListener('change', function() {
                updateField(this, 'zone');
            });
        });

        // Pour les champs observation
        document.querySelectorAll('.observation-input').forEach(textarea => {
            textarea.addEventListener('change', function() {
                updateField(this, 'observation');
            });
        });
    });

    // Fonction pour ouvrir le modal email
    function ouvrirModalEmail(ficheId, numeroFiche) {
        document.getElementById('email_fiche_id').value = ficheId;
        document.getElementById('email_sujet').value = 'Fiche ' + numeroFiche + ' - CIBER Auto-contrôle';
        var modal = new bootstrap.Modal(document.getElementById('modalEmail'));
        modal.show();
    }
</script>

<?php require_once 'includes/footer.php'; ?>