<!DOCTYPE html>
<html lang="en">
<head>
  <?php include('includes/head.php'); ?>
  <style>
    .filter-section {
      background-color: #f8f9fc;
      padding: 20px;
      border-radius: 10px;
      margin-bottom: 20px;
      border: 1px solid #e3e6f0;
    }    .export-section {
      margin-top: 15px;
      padding-top: 15px;
      border-top: 1px solid #e3e6f0;
    }
    .export-buttons {
      display: flex;
      flex-wrap: wrap;
      gap: 10px;
      margin-top: 10px;
    }
    .export-buttons .btn {
      flex: 1;
      min-width: 200px;
    }
    @media (max-width: 768px) {
      .export-buttons .btn {
        min-width: 100%;
      }
    }
  </style>
</head>
<body id="page-top">
<?php include('config/connexion.php'); 

// Récupérer les paramètres de filtre
$date_debut = isset($_GET['date_debut']) ? $_GET['date_debut'] : '';
$date_fin = isset($_GET['date_fin']) ? $_GET['date_fin'] : '';
$filtre_actif = !empty($date_debut) && !empty($date_fin);

?>
  <div id="wrapper">
    <!-- Sidebar -->
    <?php include('includes/sidebar.php'); ?>
    <!-- Sidebar -->
    <div id="content-wrapper" class="d-flex flex-column">
      <div id="content">
        <!-- TopBar -->
        <?php include('includes/topbar.php'); ?>
        <!-- Topbar -->

        <!-- Container Fluid-->
        <div class="container-fluid" id="container-wrapper">          <div class="d-sm-flex align-items-center justify-content-between mb-4">
            <h1 class="h3 mb-0 text-gray-800">
              Liste des Factures
              <?php if ($filtre_actif): ?>
                <small class="text-muted">(du <?php echo date('d/m/Y', strtotime($date_debut)); ?> au <?php echo date('d/m/Y', strtotime($date_fin)); ?>)</small>
              <?php endif; ?>
            </h1>
            <ol class="breadcrumb">
              <li class="breadcrumb-item"><a href="./">Accueil</a></li>
              <li class="breadcrumb-item">Facturation</li>
              <li class="breadcrumb-item active" aria-current="page">Exporter des factures</li>
            </ol>
          </div>

          <!-- Section de filtrage -->
          <div class="filter-section">
            <h6 class="font-weight-bold text-primary mb-3">
              <i class="fas fa-filter"></i> Filtrer par période
            </h6>
            <form method="GET" action="" class="row">
              <div class="col-md-4">
                <label for="date_debut" class="form-label">Date de début :</label>
                <input type="date" class="form-control" id="date_debut" name="date_debut" value="<?php echo htmlspecialchars($date_debut); ?>">
              </div>
              <div class="col-md-4">
                <label for="date_fin" class="form-label">Date de fin :</label>
                <input type="date" class="form-control" id="date_fin" name="date_fin" value="<?php echo htmlspecialchars($date_fin); ?>">
              </div>
              <div class="col-md-4">
                <label class="form-label">&nbsp;</label>
                <div class="d-flex">
                  <button type="submit" class="btn btn-primary mr-2">
                    <i class="fas fa-search"></i> Filtrer
                  </button>
                  <a href="exportation_factures.php" class="btn btn-secondary">
                    <i class="fas fa-times"></i> Réinitialiser
                  </a>
                </div>
              </div>
            </form>
              <?php if ($filtre_actif): ?>
            <div class="export-section">
              <h6 class="font-weight-bold text-success mb-2">
                <i class="fas fa-download"></i> Export PDF
              </h6>
              <?php 
              // Vérifier si TCPDF est installé
              $tcpdf_installed = file_exists(__DIR__ . '/vendor/tcpdf/tcpdf.php');
              if (!$tcpdf_installed): ?>
                <div class="alert alert-warning">
                  <i class="fas fa-exclamation-triangle"></i> 
                  <strong>TCPDF requis :</strong> Pour générer des PDFs, vous devez d'abord installer TCPDF.
                  <br>
                  <a href="install_tcpdf.php" class="btn btn-warning btn-sm mt-2">
                    <i class="fas fa-download"></i> Installer TCPDF
                  </a>
                </div>              <?php else: ?>
                <div class="export-buttons">
                  <a href="export_factures_pdf.php?date_debut=<?php echo urlencode($date_debut); ?>&date_fin=<?php echo urlencode($date_fin); ?>" 
                     class="btn btn-success" 
                     onclick="return confirm('Voulez-vous exporter toutes les factures de cette période en PDF ?\n\nNombre de factures: <?php echo $result->num_rows ?? 0; ?>');">
                    <i class="fas fa-file-pdf"></i> Exporter Factures Complètes (ZIP)
                  </a>
                  <a href="export_liste_factures_pdf.php?date_debut=<?php echo urlencode($date_debut); ?>&date_fin=<?php echo urlencode($date_fin); ?>" 
                     class="btn btn-info" 
                     onclick="return confirm('Voulez-vous exporter la liste des factures avec détails de paiement en PDF ?\n\nNombre de factures: <?php echo $result->num_rows ?? 0; ?>');">
                    <i class="fas fa-list-alt"></i> Exporter Liste avec Paiements
                  </a>
                </div>
                <small class="form-text text-muted mt-2">
                  <i class="fas fa-info-circle text-info"></i>
                  <strong>Factures Complètes :</strong> Génère un ZIP avec chaque facture en PDF séparé.<br>
                  <strong>Liste avec Paiements :</strong> Génère un tableau récapitulatif avec détails des paiements.
                </small>
              <?php endif; ?>
            </div>
            <?php endif; ?></div>

          <!-- Factures Table -->
          <div class="card mb-4">
            <div class="card-header py-3 d-flex flex-row align-items-center justify-content-between">
              <h6 class="m-0 font-weight-bold text-primary">
                Factures
                <?php if ($filtre_actif): ?>
                  <span class="badge badge-info ml-2">Période filtrée</span>
                <?php endif; ?>
              </h6>
            </div>
            <div class="table-responsive p-3">
              <table class="table align-items-center table-flush" id="dataTable">
                <thead class="thead-light">
                  <tr>
                    <th>Numéro de Facture</th>
                    <th>Numéro de Police</th>
                    <th>Objet Assuré</th>
                    <th>Date de Création</th>
                    <th>Montant Total (DH)</th>
                    <th>Actions</th>
                  </tr>
                </thead>
                <tfoot>
                  <tr>
                    <th>Numéro de Facture</th>
                    <th>Numéro de Police</th>
                    <th>Objet Assuré</th>
                    <th>Date de Création</th>
                    <th>Montant Total (DH)</th>
                    <th>Actions</th>
                  </tr>
                </tfoot>                <tbody>
                  <?php
                  // Construire la requête avec ou sans filtre par date
                  if ($filtre_actif) {
                    // Valider les dates
                    if (DateTime::createFromFormat('Y-m-d', $date_debut) && DateTime::createFromFormat('Y-m-d', $date_fin)) {
                      $query = "SELECT facture_num, libelle, objet_assure, facture_date, total FROM facture_table WHERE DATE(facture_date) BETWEEN ? AND ? ORDER BY facture_date DESC";
                      $stmt = $conn->prepare($query);
                      $stmt->bind_param("ss", $date_debut, $date_fin);
                      $stmt->execute();
                      $result = $stmt->get_result();
                    } else {
                      echo "<tr><td colspan='6' class='text-center text-danger'>Format de date invalide</td></tr>";
                      $result = false;
                    }
                  } else {
                    $query = "SELECT facture_num, libelle, objet_assure, facture_date, total FROM facture_table ORDER BY facture_date DESC";
                    $result = $conn->query($query);
                  }

                  if ($result && $result->num_rows > 0) {
                    $total_montant = 0;
                    while ($row = $result->fetch_assoc()) {
                      $total_montant += $row['total'];
                      echo "<tr>
                              <td>" . htmlspecialchars($row['facture_num']) . "</td>
                              <td>" . htmlspecialchars($row['libelle']) . "</td>
                              <td><span style='direction: ltr; unicode-bidi: bidi-override; display: inline-block;'>" . htmlspecialchars($row['objet_assure'] ?? '') . "</span></td>
                              <td>" . htmlspecialchars(date('d/m/Y H:i', strtotime($row['facture_date']))) . "</td>
                              <td>" . number_format($row['total'], 2, ',', ' ') . " DH</td>
                              <td>
                                <a href='facture.php?num=" . urlencode($row['facture_num']) . "' class='btn btn-sm btn-info' title='Consulter' target='_blank'>
                                  <i class='fas fa-eye'></i>
                                </a>
                              </td>
                            </tr>";
                    }
                    
                    // Afficher le total si on a des résultats
                    if ($filtre_actif) {
                      echo "<tr style='background-color: #f8f9fc; font-weight: bold;'>
                              <td colspan='4' class='text-right'>Total période :</td>
                              <td>" . number_format($total_montant, 2, ',', ' ') . " DH</td>
                              <td></td>
                            </tr>";
                    }
                  } else {
                    if ($filtre_actif) {
                      echo "<tr><td colspan='6' class='text-center'>Aucune facture trouvée pour cette période</td></tr>";
                    } else {
                      echo "<tr><td colspan='6' class='text-center'>Aucune facture trouvée</td></tr>";
                    }
                  }
                  
                  if (isset($stmt)) {
                    $stmt->close();
                  }
                  // Connection is managed globally; do not close it here.
                  ?>
                </tbody>
              </table>
            </div>
          </div>
          <!-- End Factures Table -->

        </div>
        <!---Container Fluid-->
      </div>
      <!-- Footer -->
      <?php include('includes/footer.php'); ?>
      <!-- Footer -->
    </div>
  </div>
  <!-- Scroll to top -->
  <a class="scroll-to-top rounded" href="#page-top">
    <i class="fas fa-angle-up"></i>
  </a>
  <script src="vendor/jquery/jquery.min.js"></script>
  <script src="vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
  <script src="vendor/jquery-easing/jquery.easing.min.js"></script>
  <script src="js/ruang-admin.min.js"></script>
  <script src="vendor/datatables/jquery.dataTables.min.js"></script>
  <script src="vendor/datatables/dataTables.bootstrap4.min.js"></script>  <script>
    $(document).ready(function () {
      $('#dataTable').DataTable({
        "language": {
          "url": "//cdn.datatables.net/plug-ins/1.11.5/i18n/fr-FR.json"
        },
        "order": [[ 3, "desc" ]], // Trier par date de création (colonne 3) décroissant
        "pageLength": 25
      });
      
      // Validation des dates côté client
      $('form').on('submit', function(e) {
        const dateDebut = document.getElementById('date_debut').value;
        const dateFin = document.getElementById('date_fin').value;
        
        if (dateDebut && dateFin) {
          if (new Date(dateDebut) > new Date(dateFin)) {
            e.preventDefault();
            alert('La date de début ne peut pas être postérieure à la date de fin.');
            return false;
          }
          
          // Vérifier que la période n'est pas trop large (plus de 2 ans)
          const diffTime = Math.abs(new Date(dateFin) - new Date(dateDebut));
          const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
          
          if (diffDays > 730) {
            if (!confirm('La période sélectionnée est très large (' + diffDays + ' jours). Cela peut prendre du temps à traiter. Continuer ?')) {
              e.preventDefault();
              return false;
            }
          }
        } else if (dateDebut || dateFin) {
          e.preventDefault();
          alert('Veuillez sélectionner les deux dates (début et fin).');
          return false;
        }
      });
      
      // Ajouter des raccourcis pour les périodes prédéfinies
      $('.filter-section').append(`
        <div class="mt-3 pt-3" style="border-top: 1px solid #dee2e6;">
          <h6 class="font-weight-bold text-secondary mb-2">
            <i class="fas fa-clock"></i> Raccourcis rapides
          </h6>
          <div class="btn-group btn-group-sm" role="group">
            <button type="button" class="btn btn-outline-primary" onclick="setPeriod('today')">Aujourd'hui</button>
            <button type="button" class="btn btn-outline-primary" onclick="setPeriod('week')">Cette semaine</button>
            <button type="button" class="btn btn-outline-primary" onclick="setPeriod('month')">Ce mois</button>
            <button type="button" class="btn btn-outline-primary" onclick="setPeriod('quarter')">Ce trimestre</button>
            <button type="button" class="btn btn-outline-primary" onclick="setPeriod('year')">Cette année</button>
          </div>
        </div>
      `);
    });
    
    // Helpers pour format local et semaine ISO (lundi-dimanche)
    function formatDateLocal(date) {
      const y = date.getFullYear();
      const m = String(date.getMonth() + 1).padStart(2, '0');
      const d = String(date.getDate()).padStart(2, '0');
      return `${y}-${m}-${d}`;
    }

    function startOfIsoWeek(date) {
      const d = new Date(date.getFullYear(), date.getMonth(), date.getDate());
      const day = d.getDay(); // 0=dimanche, 1=lundi, ..., 6=samedi
      const diffToMonday = (day === 0 ? -6 : 1 - day);
      d.setDate(d.getDate() + diffToMonday);
      return d;
    }

    function endOfIsoWeek(date) {
      const start = startOfIsoWeek(date);
      const end = new Date(start.getFullYear(), start.getMonth(), start.getDate());
      end.setDate(start.getDate() + 6);
      return end;
    }

    // Fonction pour définir les périodes prédéfinies
    function setPeriod(period) {
      const now = new Date();
      let startDate, endDate;

      switch (period) {
        case 'today':
          startDate = new Date(now.getFullYear(), now.getMonth(), now.getDate());
          endDate = new Date(now.getFullYear(), now.getMonth(), now.getDate());
          break;
        case 'week':
          startDate = startOfIsoWeek(now);
          endDate = endOfIsoWeek(now);
          break;
        case 'month':
          startDate = new Date(now.getFullYear(), now.getMonth(), 1);
          endDate = new Date(now.getFullYear(), now.getMonth() + 1, 0);
          break;
        case 'quarter': {
          const q = Math.floor(now.getMonth() / 3);
          startDate = new Date(now.getFullYear(), q * 3, 1);
          endDate = new Date(now.getFullYear(), q * 3 + 3, 0);
          break;
        }
        case 'year':
          startDate = new Date(now.getFullYear(), 0, 1);
          endDate = new Date(now.getFullYear(), 11, 31);
          break;
      }

      document.getElementById('date_debut').value = formatDateLocal(startDate);
      document.getElementById('date_fin').value = formatDateLocal(endDate);
    }
  </script>
</body>
</html>
