<?php
// Include database connection
include 'config/connexion.php';
// Include log module
require_once 'includes/simple_log.php';
// Initialize variables for form submission
$errors = [
  'client_cin' => '',
  'policy_type' => '',
  'immat_part1' => '',
  'immat_part2' => '',
  'immat_part3' => '',
  'n_policy' => '',
  'start_date' => '',
  'end_date' => '',
  'montant_to_paie' => '',
  'montant_paye' => '',
  'echeance_date' => '',
  'paiement_ref' => '',
  'next_paiement_date' => ''
];
$policy_id = null; // Store the ID of the inserted policy

// Récupérer toutes les lettres de la table lettre
$lettres = [];
$queryLettres = "SELECT lettre FROM lettres_table";
$resultLettres = $conn->query($queryLettres);
if ($resultLettres && $resultLettres->num_rows > 0) {
    while ($row = $resultLettres->fetch_assoc()) {
        $lettres[] = $row['lettre'];
    }
}

// Récupérer les modes de paiement depuis paiement_mode_table
$paiement_modes = [];
$queryModes = "SELECT paiement_mode FROM paiement_mode_table";
$resultModes = $conn->query($queryModes);
if ($resultModes && $resultModes->num_rows > 0) {
    while ($row = $resultModes->fetch_assoc()) {
        $paiement_modes[] = $row['paiement_mode'];
    }
}

// Récupérer toutes les marques depuis marques_transport
$marques = [];
$queryMarques = "SELECT marque FROM marques_transport ORDER BY marque ASC";
$resultMarques = $conn->query($queryMarques);
if ($resultMarques && $resultMarques->num_rows > 0) {
    while ($row = $resultMarques->fetch_assoc()) {
        $marques[] = $row['marque'];
    }
}

// Initialiser les variables pour éviter les erreurs "Undefined array key"
$client_cin = '';
$policy_category = 'V'; // Par défaut Véhicule
$policy_type = '';
$immat_part1 = '';
$immat_part2 = '';
$immat_part3 = '';
$immatriculation = '';
$n_policy = '';
$n_attestation = '';
$start_date = '';
$end_date = '';
$montant_to_paie = '';
$montant_paye = '';
$marque = '';
$client_name = '';
$client_id = null;
$paiement_mode = '';
$paiement_ref = '';
$next_paiement_date = '';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $client_cin = trim($_POST['client_cin'] ?? '');
    $policy_category = trim($_POST['policy_category'] ?? 'V'); // Par défaut Véhicule
    $policy_type = trim($_POST['policy_type'] ?? '');
    
    // Récupérer l'immatriculation depuis le champ caché ou construire à partir des 3 champs
    $immatriculation = trim($_POST['immatriculation'] ?? '');
    if (empty($immatriculation)) {
        // Si le champ caché est vide, construire à partir des 3 champs séparés
        $immat_num1 = trim($_POST['immat_num1'] ?? '');
        $immat_letter = strtoupper(trim($_POST['immat_letter'] ?? ''));
        $immat_num2 = trim($_POST['immat_num2'] ?? '');
        if ($immat_num1 || $immat_letter || $immat_num2) {
            $immatriculation = $immat_num1 . ' | ' . $immat_letter . ' | ' . $immat_num2;
        }
    }
    
    $n_policy = trim($_POST['n_policy'] ?? '');
    $n_attestation = trim($_POST['n_attestation'] ?? '');
    $start_date = trim($_POST['start_date'] ?? '');
    $end_date = trim($_POST['end_date'] ?? '');
    $montant_to_paie = trim($_POST['montant_to_paie'] ?? '');
    $montant_paye = trim($_POST['montant_paye'] ?? '');
    $marque = trim($_POST['marque'] ?? '');
    $client_name = '';
    $paiement_mode = strtoupper(trim($_POST['paiement_mode'] ?? ''));
    $paiement_ref = trim($_POST['paiement_ref'] ?? '');
    $paiement_statut = 0;
    if ($paiement_mode === 'ESPECE') {
        $paiement_statut = 1;
    }

    // Vérifier l'unicité du numéro d'attestation
    if (!empty($n_attestation)) {
        $check_attestation = "SELECT id FROM policy_table WHERE n_attestation = ?";
        $stmt_check = $conn->prepare($check_attestation);
        $stmt_check->bind_param("s", $n_attestation);
        $stmt_check->execute();
        $stmt_check->store_result();
        if ($stmt_check->num_rows > 0) {
            $errors['n_attestation'] = "Ce numéro d'attestation existe déjà.";
        }
        $stmt_check->close();
    }

    // Déterminer l'immatriculation selon la catégorie
    if ($policy_category === 'V') {
        // L'immatriculation est déjà saisie par l'utilisateur (format: 1234 | A | 12)
    } else if ($policy_category === 'RD') {
        // Pour RD, utiliser le type de police si l'immatriculation est vide
        if (empty($immatriculation)) {
            $immatriculation = trim($_POST['policy_type'] ?? '');
        }
    }

    // Validate client CIN and get client ID
    $client_id = null;
    if (empty($client_cin)) {
        $errors['client_cin'] = "Le CIN du client est obligatoire.";
    } else {
        $query = "SELECT id, client_name FROM clients_table WHERE client_cin = ?";
        $stmt = $conn->prepare($query);
        $stmt->bind_param("s", $client_cin);
        $stmt->execute();
        $stmt->bind_result($client_id_result, $client_name_result);
        if (!$stmt->fetch()) {
            $errors['client_cin'] = "Le CIN n'existe pas dans la table des clients.";
        } else {
            $client_id = $client_id_result;
            $client_name = $client_name_result; // Retrieve client name for display purposes
        }
        $stmt->close();
    }    // Validate immatriculation - uniquement pour les polices Véhicule
    if ($policy_category === 'V') {
        if (empty($immatriculation)) {
            $errors['immatriculation'] = "L'immatriculation est obligatoire.";
        } else {
            // Vérifier l'unicité de l'immatriculation
            $query = "SELECT id FROM policy_table WHERE immatriculation = ?";
            $stmt = $conn->prepare($query);
            $stmt->bind_param("s", $immatriculation);
            $stmt->execute();
            $stmt->bind_result($existing_immat_id);
            if ($stmt->fetch()) {
                $errors['immatriculation'] = "Cette immatriculation existe déjà.";
            }
            $stmt->close();
        }
    } else {
        // Pour RD, vider la marque
        $marque = '';
    }

    // Validate policy type
    if (empty($policy_type)) {
        $errors['policy_type'] = "Le type de police est obligatoire.";
    }

    // Validate policy number
    $existing_policy_id = null;
    if (empty($n_policy)) {
        $errors['n_policy'] = "Le numéro de police est obligatoire.";
    } else {
        $query = "SELECT id FROM policy_table WHERE n_policy = ?";
        $stmt = $conn->prepare($query);
        $stmt->bind_param("s", $n_policy);
        $stmt->execute();
        $stmt->bind_result($existing_id);
        if ($stmt->fetch()) {
            $existing_policy_id = $existing_id;
            $errors['n_policy'] = "Le numéro de police existe déjà.";
        }
        $stmt->close();
    }

    // Validate start date
    if (empty($start_date)) {
        $errors['start_date'] = "La date de début est obligatoire.";
    }

    // Validate end date
    if (empty($end_date)) {
        $errors['end_date'] = "La date de fin est obligatoire.";
    } elseif (!empty($start_date) && $end_date <= $start_date) {
        $errors['end_date'] = "La date de fin doit être supérieure à la date de début.";
    }

    // Validate montant to pay - doit être un nombre décimal
    if (empty($montant_to_paie)) {
        $errors['montant_to_paie'] = "Le montant à payer est obligatoire.";
    } elseif (!is_numeric($montant_to_paie)) {
        $errors['montant_to_paie'] = "Le montant doit être un nombre.";
    } else {
        // Formater avec 2 décimales
        $montant_to_paie = number_format((float)$montant_to_paie, 2, '.', '');
    }    // Validate montant payé - n'est pas obligatoire
    if (!empty($montant_paye)) {
        if (!is_numeric($montant_paye)) {
            $errors['montant_paye'] = "Le montant payé doit être un nombre.";
        } else {
            // Formater avec 2 décimales
            $montant_paye = number_format((float)$montant_paye, 2, '.', '');
        }
    } else {
        $montant_paye = 0; // Si vide, considérer comme 0
    }

    // Nouvelle validation : montant_paye doit être >= montant_to_paie si montant_to_paie existe
    if (is_numeric($montant_to_paie) && is_numeric($montant_paye)) {
        if ($montant_paye > $montant_to_paie) {
            $errors['montant_paye'] = "Le montant payé doit être inférieur ou égal au montant à payer.";
        }
    }

  // Calculer le reste à payer
    $reste_a_payer = 0;
    if (is_numeric($montant_to_paie) && is_numeric($montant_paye)) {
        $reste_a_payer = max(0, $montant_to_paie - $montant_paye);
        $reste_a_payer = number_format($reste_a_payer, 2, '.', '');
    }    // Validation du mode de paiement - obligatoire seulement si un montant est payé
  // Gestion prochain paiement si partiel
  if (is_numeric($montant_to_paie) && is_numeric($montant_paye) && $montant_paye < $montant_to_paie) {
    $next_paiement_date = trim($_POST['next_paiement_date'] ?? '');
    if ($next_paiement_date === '') {
      $errors['next_paiement_date'] = "Date du prochain paiement obligatoire (paiement partiel).";
    } elseif(!preg_match('/^\\d{4}-\\d{2}-\\d{2}$/',$next_paiement_date)) {
      $errors['next_paiement_date'] = "Format de date prochain paiement invalide (AAAA-MM-JJ).";
    }
  } else {
    $next_paiement_date = '';
  }
    if ($montant_paye > 0) {
        if (empty($paiement_mode)) {
            $errors['paiement_mode'] = "Le mode de paiement est obligatoire si un montant est payé.";
        }
        // Si le mode n'est pas ESPECE et n'est pas VIREMENT BANCAIRE, paiement_ref obligatoire
        if ($paiement_mode && !in_array(strtoupper($paiement_mode), ['ESPECE', 'VIREMENT BANCAIRE']) && empty($paiement_ref)) {
            $errors['paiement_ref'] = "Le numéro de référence est obligatoire pour ce mode de paiement.";
        }
        
        // Validation de la date d'échéance - obligatoire pour CHEQUE et EFFET
        if ($paiement_mode && in_array(strtoupper($paiement_mode), ['CHEQUE', 'EFFET'])) {
            $echeance_date = trim($_POST['echeance_date'] ?? '');
            if (empty($echeance_date)) {
                $errors['echeance_date'] = "La date d'échéance est obligatoire pour les paiements par chèque ou effet.";
            }
        }
    }

    // Insert the policy if no validation errors
  if (!array_filter($errors)) {
    // Récupérer l'ID de l'utilisateur actuel depuis la session
    $agent = isset($_SESSION['user_id']) ? $_SESSION['user_id'] : 0;
    
    // Si le mode de paiement n'est pas ESPECE, ne pas déduire le montant payé de total_reste
    $montant_paye_for_policy = 0;
    $reste_a_payer_for_policy = $montant_to_paie;
    
    if (strtoupper($paiement_mode) === 'ESPECE') {
        $montant_paye_for_policy = $montant_paye;
        $reste_a_payer_for_policy = $reste_a_payer;
    }
    
    // Ajouter colonne client_id et next_paiement si absentes
    $hasClientIdCol = false;
    $hasNextCol = false;
    try { 
        $chk = $conn->query("SHOW COLUMNS FROM policy_table LIKE 'client_id'"); 
        if($chk && $chk->num_rows>0) $hasClientIdCol=true; 
        if($chk) $chk->close(); 
    } catch(Throwable $e){}
    if(!$hasClientIdCol){ 
        try { 
            $conn->query("ALTER TABLE policy_table ADD COLUMN client_id INT NULL"); 
            $hasClientIdCol=true; 
        } catch(Throwable $e){} 
    }
    
    try { 
        $chk = $conn->query("SHOW COLUMNS FROM policy_table LIKE 'next_paiement'"); 
        if($chk && $chk->num_rows>0) $hasNextCol=true; 
        if($chk) $chk->close(); 
    } catch(Throwable $e){}
    if(!$hasNextCol){ 
        try { 
            $conn->query("ALTER TABLE policy_table ADD COLUMN next_paiement DATE NULL"); 
            $hasNextCol=true; 
        } catch(Throwable $e){} 
    }
    
    if($hasNextCol){
      $insertQuery = "INSERT INTO policy_table (client_id, immatriculation, n_policy, n_attestation, start_date, end_date, montant_to_paie, montant_policy, montant_paye, total_reste, agent, policy_type, marque, policy_category, next_paiement) 
              VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
      $stmt = $conn->prepare($insertQuery);
      $np = ($next_paiement_date!=='') ? $next_paiement_date : NULL;
      $stmt->bind_param(
        "issssssdddissss",
        $client_id,
        $immatriculation,
        $n_policy,
        $n_attestation,
        $start_date,
        $end_date,
        $montant_to_paie,
        $montant_to_paie,
        $montant_paye_for_policy,
        $reste_a_payer_for_policy,
        $agent,
        $policy_type,
        $marque,
        $policy_category,
        $np
      );
    } else {
      $insertQuery = "INSERT INTO policy_table (client_id, immatriculation, n_policy, n_attestation, start_date, end_date, montant_to_paie, montant_policy, montant_paye, total_reste, agent, policy_type, marque, policy_category) 
              VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
      $stmt = $conn->prepare($insertQuery);
      $stmt->bind_param(
        "issssssdddisss",
        $client_id,
        $immatriculation,
        $n_policy,
        $n_attestation,
        $start_date,
        $end_date,
        $montant_to_paie,
        $montant_to_paie,
        $montant_paye_for_policy,
        $reste_a_payer_for_policy,
        $agent,
        $policy_type,
        $marque,
        $policy_category
      );
    }
    if ($stmt->execute()) {
            $policy_id = $conn->insert_id; // Get the ID of the inserted policy
            
            // Enregistrer la création de la police dans le log
            logPolicyCreation($n_policy, $client_cin);
            
            // Insérer le paiement dans receipts_table seulement si un montant a été payé
            $receipt_number = null;            if ($montant_paye > 0) {
                $receipt_number = 'R-' . date('Ymd') . '-' . sprintf('%04d', mt_rand(1, 9999));
                $now = date('Y-m-d H:i:s');
                $echeance_date = trim($_POST['echeance_date'] ?? null);
                
                // Si le paiement est en espèce ou virement bancaire, la date d'échéance est le même jour
                if (in_array(strtoupper($paiement_mode), ['ESPECE', 'VIREMENT BANCAIRE'])) {
                    $echeance_date = date('Y-m-d'); // Date du jour
                }

                $insertReceipt = $conn->prepare("INSERT INTO receipts_table (
                    receipt_number, policy_number, client_id, immatriculation, montant_total, montant_paye, reste_a_payer, agent, date_creation, paiement_mode, paiement_ref, paiement_statut, echeance_date, n_attestation
                ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
                $insertReceipt->bind_param(
                    "ssissddissssss",
                    $receipt_number,
                    $n_policy,
                    $client_id,
                    $immatriculation,
                    $montant_to_paie,
                    $montant_paye,
                    $reste_a_payer,
                    $agent,
                    $now,
                    $paiement_mode,
                    $paiement_ref,
                    $paiement_statut,
                    $echeance_date,
                    $n_attestation
                );                $insertReceipt->execute();
                $insertReceipt->close();                // Enregistrer le paiement dans le log global
                logPayment($n_policy, $montant_paye, $paiement_mode, $paiement_ref, $receipt_number);
            }            // Store these values in session for the receipt (ajouter receipt_number)
            $_SESSION['receipt_data'] = [
                'policy_id' => $policy_id,
                'client_id' => $client_id,
                'immatriculation' => $immatriculation,
                'n_policy' => $n_policy,
                'start_date' => $start_date,
                'end_date' => $end_date,
                'montant_to_paie' => $montant_to_paie,
                'montant_paye' => $montant_paye,
                'reste_a_payer' => $reste_a_payer,
                'agent' => $agent,
                'date_creation' => date('Y-m-d H:i:s'),
                'receipt_number' => $receipt_number // <-- garder le numéro de reçu
            ];

            // Redirection différente selon si un paiement a été effectué
            if ($receipt_number) {
                // Redirection vers recu.php si un paiement a été fait
                header('Location: recu.php?receipt_number=' . urlencode($receipt_number));
            } else {
                // Redirection vers la liste des polices si aucun paiement
                $_SESSION['success_message'] = "Police créée avec succès (N° $n_policy). Aucun paiement effectué.";
                header('Location:policys_table.php');
            }
            exit;
        } else {
            $errors['client_cin'] = "Erreur lors de l'ajout de la police.";
        }
        $stmt->close();
    }
}

// Récupérer les parties de l'immatriculation s'ils existent (format: part3-part2-part1)
// mais seulement si elles n'ont pas déjà été définies via POST
if (empty($immat_part1) && empty($immat_part2) && empty($immat_part3) && !empty($immatriculation)) {
    $immat_parts = explode('-', $immatriculation);
    $immat_part3 = isset($immat_parts[0]) ? $immat_parts[0] : ''; // Premier élément = part3 (chiffres longs)
    $immat_part2 = isset($immat_parts[1]) ? $immat_parts[1] : ''; // Deuxième élément = part2 (lettre)
    $immat_part1 = isset($immat_parts[2]) ? $immat_parts[2] : ''; // Troisième élément = part1 (chiffres courts)
}

?>
<!DOCTYPE html>
<html lang="en">
<head>
  <?php include 'includes/head.php'; ?>
  <!-- Select2 CSS -->
  <link href="vendor/select2/dist/css/select2.min.css" rel="stylesheet">  <!-- Styles pour l'immatriculation -->
  <style>
  .immat-group {
    display: flex;
    gap: 10px;
  }
  .immat-part {
    flex: 1;
    text-align: center;
  }
  
  /* Amélioration des boutons radio */
  .form-check-label {
    cursor: pointer;
    padding: 8px 15px;
    border-radius: 20px;
    transition: all 0.3s ease;
    border: 2px solid transparent;
  }
  
  .form-check-input:checked + .form-check-label {
    background-color: #e3f2fd;
    border-color: #2196f3;
    font-weight: 600;
  }
  
  .form-check-label:hover {
    background-color: #f5f5f5;
  }
  </style>
</head>

<body id="page-top">
  <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">Ajouter une nouvelle police</h1>
            <ol class="breadcrumb">
              <li class="breadcrumb-item"><a href="./">Accueil</a></li>
              <li class="breadcrumb-item">Polices</li>
              <li class="breadcrumb-item active" aria-current="page">Ajouter une police</li>
            </ol>
          </div>

          <div class="row">
            <div class="col-lg-6">
              <!-- Form -->
              <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">Formulaire de nouvelle police</h6>
                </div>                <div class="card-body">
                  <form method="POST" action="new_policy.php">                    <!-- Choix du type de police V/RD -->
                    <div class="form-group">
                      <label>Type de police</label>
                      <div class="form-check-inline">
                        <input class="form-check-input" type="radio" name="policy_category" id="policy_v" value="V" <?php echo (!empty($_POST['policy_category']) && $_POST['policy_category'] === 'V') || empty($_POST['policy_category']) ? 'checked' : ''; ?>>
                        <label class="form-check-label" for="policy_v">
                          <i class="fas fa-car text-info mr-1"></i>Véhicule (V)
                        </label>
                      </div>
                      <div class="form-check-inline ml-3">
                        <input class="form-check-input" type="radio" name="policy_category" id="policy_rd" value="RD" <?php echo (!empty($_POST['policy_category']) && $_POST['policy_category'] === 'RD') ? 'checked' : ''; ?>>
                        <label class="form-check-label" for="policy_rd">
                          <i class="fas fa-shield-alt text-warning mr-1"></i>Risque Divers (RD)
                        </label>
                      </div>
                    </div><div class="form-group">
                          <label for="client_cin">CIN du client</label>
                          <select class="form-control select2-client" id="client_cin" name="client_cin" required>
                              <option value="">-- Sélectionner un client --</option>
                              <?php
                              // Récupérer tous les clients depuis la table clients_table
                              $sql_clients = "SELECT client_cin, client_name FROM clients_table ORDER BY client_name ASC";
                              $res_clients = $conn->query($sql_clients);
                              if ($res_clients) {
                                  while ($row_client = $res_clients->fetch_assoc()) {
                                      $selected = (!empty($_POST['client_cin']) && $_POST['client_cin'] === $row_client['client_cin']) ? 'selected' : '';
                                      echo '<option value="' . htmlspecialchars($row_client['client_cin']) . '" ' . $selected . '>' . 
                                           htmlspecialchars($row_client['client_name']) . ' (' . htmlspecialchars($row_client['client_cin']) . ')</option>';
                                  }
                              }
                              ?>
                          </select>
                          <?php if ($errors['client_cin']): ?>
                              <small class="text-danger"><?php echo $errors['client_cin']; ?></small>
                          <?php endif; ?>
                          <div id="client-policies-count" class="mt-2 text-info" style="font-weight:600;"></div>
            </div>
                                 <div class="form-group">
                          <label for="n_policy">Numéro de police</label>
                          <input type="text" class="form-control" id="n_policy" name="n_policy" required 
                                 value="<?php if(!empty($n_policy)){ echo htmlspecialchars($n_policy);} ?>">
                          <?php if ($errors['n_policy']): ?>
                              <small class="text-danger"><?php echo $errors['n_policy']; ?></small>
                              <?php if ($existing_policy_id): ?>
                                  <br>
                                  <a href="renew_policy.php?id=<?php echo $existing_policy_id; ?>" class="btn btn-warning btn-sm mt-2">
                                      <i class="fas fa-sync-alt"></i> Renouveler cette police
                                  </a>
                              <?php endif; ?>
                          <?php endif; ?>
                      </div>
                      <div class="form-group">
                          <label for="n_attestation">Numéro d'Attestation</label>
                          <input type="text" class="form-control" id="n_attestation" name="n_attestation" 
                                 value="<?php echo htmlspecialchars($n_attestation); ?>">
                      </div>
                      <div class="form-group">
                          <label for="policy_type">Type de police</label>
                          <select class="form-control" id="policy_type" name="policy_type" required>
                              <option value="">-- Sélectionner --</option>
                              <?php
                              // Récupérer les types de police avec leur risque depuis la table policy_type
                              $sql_types = "SELECT type, risque FROM policy_type ORDER BY type ASC";
                              $res_types = $conn->query($sql_types);
                              if ($res_types) {
                                  while ($row_type = $res_types->fetch_assoc()) {
                                      $selected = (!empty($policy_type) && $policy_type === $row_type['type']) ? 'selected' : '';
                                      echo '<option value="' . htmlspecialchars($row_type['type']) . '" data-risque="' . htmlspecialchars($row_type['risque']) . '" ' . $selected . '>' . htmlspecialchars($row_type['type']) . '</option>';
                                  }
                              }
                              ?>
                          </select>
                          <?php if ($errors['policy_type']): ?>
                              <small class="text-danger"><?php echo $errors['policy_type']; ?></small>
                          <?php endif; ?>
                      </div><!-- Champs spécifiques aux véhicules (masqués pour RD) -->
                      <div id="vehicle_fields" class="vehicle-only">                        <div class="form-group">
                            <label for="marque">Marque du véhicule</label>
                            <select class="form-control select2-marque" id="marque" name="marque">
                                <option value="">-- Sélectionner une marque --</option>
                                <?php foreach($marques as $marque_item): ?>
                                    <option value="<?php echo htmlspecialchars($marque_item); ?>" <?php if(!empty($marque) && $marque === $marque_item) echo 'selected'; ?>>
                                        <?php echo htmlspecialchars($marque_item); ?>
                                    </option>
                                <?php endforeach; ?>
                            </select>
                        </div>                        <div class="form-group">
                            <label for="immatriculation">Immatriculation</label>
                            <div class="d-flex align-items-center gap-2" style="gap: 10px;">
                                <input type="text" class="form-control" id="immat_num1" placeholder="1234" style="flex: 1; text-align: center;">
                                <span style="font-weight: bold;">|</span>
                                <input type="text" class="form-control" id="immat_letter" placeholder="ب" style="flex: 0 0 60px; text-align: center; text-transform: uppercase;">
                                <span style="font-weight: bold;">|</span>
                                <input type="text" class="form-control" id="immat_num2" placeholder="12" style="flex: 0 0 80px; text-align: center;">
                            </div>
                            <input type="hidden" id="immatriculation" name="immatriculation" value="<?php echo htmlspecialchars($immatriculation); ?>">
                            <small class="form-text text-muted">Saisissez les trois parties de l'immatriculation</small>
                            <?php if (isset($errors['immatriculation']) && $errors['immatriculation']): ?>
                                <small class="text-danger"><?php echo $errors['immatriculation']; ?></small>
                            <?php endif; ?>
                        </div>                      </div>                      <div class="form-group">
                          <label for="start_date">Date de début</label>
                          <input type="date" class="form-control" id="start_date" name="start_date" required 
                                 value="<?php if(!empty($start_date)){ echo htmlspecialchars($start_date);} ?>">
                          <?php if ($errors['start_date']): ?>
                              <small class="text-danger"><?php echo $errors['start_date']; ?></small>
                          <?php endif; ?>
                      </div>
                      <div class="form-group">
                          <label for="periode">Période</label>
                          <select class="form-control" id="periode" name="periode" required>
                              <option value="" selected>-- Sélectionner --</option>
                              <option value="3">3 mois</option>
                              <option value="6">6 mois</option>
                              <option value="12">12 mois</option>
                              <option value="24">24 mois</option>
                          </select>
                      </div>
                      <div class="form-group">
                          <label for="end_date">Date de fin</label>
                          <input type="date" class="form-control" id="end_date" name="end_date" required readonly
                                 value="<?php if(!empty($end_date)){ echo htmlspecialchars($end_date);} ?>">
                          <?php if ($errors['end_date']): ?>
                              <small class="text-danger"><?php echo $errors['end_date']; ?></small>
                          <?php endif; ?>
                      </div>
                      <div class="form-group">
                          <label for="montant_to_paie">Montant à payer</label>
                          <input type="number" step="0.01" min="0" class="form-control" id="montant_to_paie" name="montant_to_paie" required 
                                 value="<?php if(!empty($montant_to_paie)){ echo htmlspecialchars($montant_to_paie);} ?>">
                          <?php if ($errors['montant_to_paie']): ?>
                              <small class="text-danger"><?php echo $errors['montant_to_paie']; ?></small>
                          <?php endif; ?>
                      </div>                      <div class="form-group">
                          <label for="montant_paye">Montant payé <small class="text-muted">(optionnel)</small></label>
                          <input type="number" step="0.01" min="0" class="form-control" id="montant_paye" name="montant_paye" 
                                 value="<?php if(!empty($montant_paye)){ echo htmlspecialchars($montant_paye);} ?>">
                          <?php if ($errors['montant_paye']): ?>
                              <small class="text-danger"><?php echo $errors['montant_paye']; ?></small>
                          <?php endif; ?>
                      </div>                      <div class="form-group">
                          <label>Reste à payer</label>
                          <span id="reste_a_payer" class="form-control-plaintext text-primary">0.00</span>
                      </div>                      <div class="form-group">
                          <label for="paiement_mode">Mode de paiement <small class="text-muted">(obligatoire si montant payé > 0)</small></label>
                          <select class="form-control" id="paiement_mode" name="paiement_mode">
                              <option value="" disabled selected>Choisir le mode de paiement</option>
                              <?php foreach ($paiement_modes as $mode): ?>
                                  <option value="<?php echo htmlspecialchars($mode); ?>" <?php if (!empty($paiement_mode) && $paiement_mode === $mode) echo 'selected'; ?>>
                                      <?php echo htmlspecialchars($mode); ?>
                                  </option>
                              <?php endforeach; ?>
                          </select>
                          <?php if (!empty($errors['paiement_mode'])): ?>
                              <small class="text-danger"><?php echo $errors['paiement_mode']; ?></small>
                          <?php endif; ?>
                      </div>                      <div class="form-group" id="paiement_ref_group" style="display:none;">
                          <label for="paiement_ref">Numéro de référence (chèque/effet...)</label>
                          <input type="text" class="form-control" id="paiement_ref" name="paiement_ref" value="<?php echo htmlspecialchars($paiement_ref ?? ''); ?>">
                          <?php if (!empty($errors['paiement_ref'])): ?>
                              <small class="text-danger"><?php echo $errors['paiement_ref']; ?></small>
                          <?php endif; ?>
                      </div>                      <div class="form-group" id="echeance_date_group" style="display:none;">
                          <label for="echeance_date">Date d'échéance</label>
                          <input type="date" class="form-control" id="echeance_date" name="echeance_date" value="<?php echo htmlspecialchars($_POST['echeance_date'] ?? ''); ?>">
                          <?php if (!empty($errors['echeance_date'])): ?>
                              <small class="text-danger"><?php echo $errors['echeance_date']; ?></small>
                          <?php endif; ?>
                      </div>                     
                      <div class="form-group" id="next_paiement_group" style="display:none;">
              <label for="next_paiement_date">Date du prochain paiement (obligatoire si paiement partiel)</label>
              <input type="date" class="form-control" id="next_paiement_date" name="next_paiement_date" value="<?php echo htmlspecialchars($next_paiement_date); ?>">
              <?php if (!empty($errors['next_paiement_date'])): ?>
                <small class="text-danger"><?php echo $errors['next_paiement_date']; ?></small>
              <?php endif; ?>
            </div> 
                      <div class="d-flex justify-content-between">
                          <button type="submit" class="btn btn-primary">Ajouter</button>
                          <a href="index.php" class="btn btn-secondary">Annuler</a>
                      </div>
                  </form>
                  <?php /* Connection is managed globally; do not close it here. */ ?>
                </div>
              </div>
            </div>
          </div>
          <!--Row-->
        </div>
        <!---Container Fluid-->
      </div>
      <!-- Footer -->
     <?php include ('includes/footer.php'); ?>
      <!-- Footer -->
    </div>
  </div>

  <!-- Modal pour afficher les erreurs -->
  <div class="modal fade" id="errorModal" tabindex="-1" role="dialog" aria-labelledby="errorModalLabel" aria-hidden="true">
    <div class="modal-dialog" role="document">
      <div class="modal-content">
        <div class="modal-header bg-danger text-white">
          <h5 class="modal-title" id="errorModalLabel">
            <i class="fas fa-exclamation-triangle"></i> Erreurs de validation
          </h5>
          <button type="button" class="close text-white" data-dismiss="modal" aria-label="Close">
            <span aria-hidden="true">&times;</span>
          </button>
        </div>
        <div class="modal-body">
          <ul class="list-unstyled mb-0">
            <?php
            $hasErrors = false;
            foreach ($errors as $field => $error) {
              if (!empty($error)) {
                $hasErrors = true;
                echo '<li class="mb-2"><i class="fas fa-times-circle text-danger mr-2"></i>' . htmlspecialchars($error) . '</li>';
              }
            }
            ?>
          </ul>
        </div>
        <div class="modal-footer">
          <button type="button" class="btn btn-secondary" data-dismiss="modal">Fermer</button>
        </div>
      </div>
    </div>
  </div>

  <!-- Include required scripts -->
  <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="vendor/select2/dist/js/select2.min.js"></script>
  <script src="js/ruang-admin.min.js"></script>  <script>
    $(document).ready(function () {
      <?php if ($hasErrors && $_SERVER['REQUEST_METHOD'] === 'POST'): ?>
      // Afficher le modal d'erreurs automatiquement
      $('#errorModal').modal('show');
      <?php endif; ?>
      
      // Afficher le nombre de polices en cours pour le client sélectionné
      $('#client_cin').on('change', function() {
        var clientCin = $(this).val();
        if (clientCin) {
          $.ajax({
            url: 'get_client_policies_count.php',
            method: 'POST',
            data: { client_cin: clientCin },
            success: function(response) {
              $('#client-policies-count').html('Nombre de Polices En cours : ' + response);
            },
            error: function() {
              $('#client-policies-count').html('Impossible de récupérer le nombre de polices.');
            }
          });
        } else {
          $('#client-policies-count').html('');
        }
      });
      // Si un client est déjà sélectionné au chargement, afficher le nombre
      if ($('#client_cin').val()) {
        $('#client_cin').trigger('change');
      }
      $('.select2').select2({
        placeholder: "Choisir un client",
        allowClear: true
      });

      // Initialiser Select2 pour le champ marque avec recherche
      $('.select2-marque').select2({
        placeholder: "Rechercher une marque...",
        allowClear: true,
        width: '100%'
      });

      // Gestion des trois champs d'immatriculation qui se combinent en un seul
      function updateImmatriculation() {
        var num1 = $('#immat_num1').val().trim();
        var letter = $('#immat_letter').val().trim().toUpperCase();
        var num2 = $('#immat_num2').val().trim();
        
        if (num1 || letter || num2) {
          $('#immatriculation').val(num1 + ' | ' + letter + ' | ' + num2);
        } else {
          $('#immatriculation').val('');
        }
      }
      
      $('#immat_num1, #immat_letter, #immat_num2').on('input change blur', updateImmatriculation);
      
      // Mettre à jour avant la soumission du formulaire
      $('form').on('submit', function() {
        updateImmatriculation();
      });
      
      // Initialiser les valeurs si l'immatriculation existe déjà
      var existingImmat = $('#immatriculation').val();
      if (existingImmat) {
        var parts = existingImmat.split('|').map(function(p) { return p.trim(); });
        if (parts.length >= 3) {
          $('#immat_num1').val(parts[0]);
          $('#immat_letter').val(parts[1]);
          $('#immat_num2').val(parts[2]);
        }
      }

$('#montant_to_paie, #montant_paye').on('input', function() {
  calculateRemaining();
});

function calculateRemaining() {
  const montantTotal = parseFloat($('#montant_to_paie').val()) || 0;
  const montantPaye = parseFloat($('#montant_paye').val()) || 0;
  const reste = montantTotal - montantPaye;
  $('#reste_a_payer').text(reste > 0 ? reste.toFixed(2) : '0.00');
  if(montantTotal>0 && montantPaye < montantTotal){
    $('#next_paiement_group').show();
  } else {
    $('#next_paiement_group').hide();
    $('#next_paiement_date').val('');
  }
}

// Calculer la date de fin en fonction de la date de début et de la période
function calculateEndDate() {
  const startDate = $('#start_date').val();
  const periode = parseInt($('#periode').val());
  
  if (startDate && periode) {
    const start = new Date(startDate);
    const end = new Date(start);
    end.setMonth(end.getMonth() + periode);
    
    // Formater la date au format YYYY-MM-DD
    const year = end.getFullYear();
    const month = String(end.getMonth() + 1).padStart(2, '0');
    const day = String(end.getDate()).padStart(2, '0');
    
    $('#end_date').val(`${year}-${month}-${day}`);
  }
}

// Écouter les changements de date de début et de période
$('#start_date, #periode').on('change', function() {
  calculateEndDate();
});

// Calculer la date de fin au chargement si les valeurs existent
if ($('#start_date').val() && $('#periode').val()) {
  calculateEndDate();
}

      // Initialiser Select2 pour le champ client avec recherche
      $('.select2-client').select2({
        placeholder: "-- Sélectionner un client --",
        allowClear: true,
        width: '100%'
      });      // Afficher/cacher le champ paiement_ref selon le mode de paiement      // Gestion dynamique de l'obligation du mode de paiement
      function togglePaiementModeRequired() {
        var montantPaye = parseFloat($('#montant_paye').val()) || 0;
        var paiementModeField = $('#paiement_mode');
        
        if (montantPaye > 0) {
          paiementModeField.attr('required', 'required');
          paiementModeField.closest('.form-group').find('label').html('Mode de paiement <span class="text-danger">*</span>');
        } else {
          paiementModeField.removeAttr('required');
          paiementModeField.closest('.form-group').find('label').html('Mode de paiement <small class="text-muted">(obligatoire si montant payé > 0)</small>');
          // Vider aussi les champs de paiement si montant = 0
          paiementModeField.val('');
          $('#paiement_ref').val('');
          $('#echeance_date').val('');
          $('#paiement_ref_group').hide();
          $('#echeance_date_group').hide();
        }
      }
      
      $('#montant_paye').on('input change', function() {
        calculateRemaining();
        togglePaiementModeRequired();
      });
      
      // Appel initial
      togglePaiementModeRequired();      // Logique pour masquer/afficher les champs véhicule selon le type de police V/RD
      function toggleVehicleFields() {
        var policyCategory = $('input[name="policy_category"]:checked').val();
        var vehicleFields = $('#vehicle_fields');
        var marqueField = $('#marque');
        var immatFields = ['#immat_num1', '#immat_letter', '#immat_num2'];
        var policyTypeSelect = $('#policy_type');
        
        // Filtrer les options de type de police selon la catégorie
        filterPolicyTypes(policyCategory);
        
        if (policyCategory === 'RD') {
          // Masquer les champs véhicule pour Risque Divers
          vehicleFields.hide();
          // Supprimer l'attribut required des champs masqués
          marqueField.removeAttr('required');
          $.each(immatFields, function(index, fieldId) {
            $(fieldId).removeAttr('required');
          });
        } else {
          // Afficher les champs véhicule pour les polices Véhicule
          vehicleFields.show();
          // Remettre l'attribut required pour les champs véhicule
          // Note: La marque n'est pas obligatoire mais l'immatriculation oui pour les véhicules
          $.each(immatFields, function(index, fieldId) {
            $(fieldId).attr('required', 'required');
          });
        }
      }
      
      // Fonction pour filtrer les types de police selon la catégorie V/RD
      function filterPolicyTypes(selectedCategory) {
        var policyTypeSelect = $('#policy_type');
        var currentValue = policyTypeSelect.val();
        
        // Sauvegarder toutes les options si ce n'est pas déjà fait
        if (!policyTypeSelect.data('all-options')) {
          policyTypeSelect.data('all-options', policyTypeSelect.html());
        }
        
        // Restaurer toutes les options
        policyTypeSelect.html(policyTypeSelect.data('all-options'));
        
        // Filtrer selon la catégorie sélectionnée
        policyTypeSelect.find('option').each(function() {
          var option = $(this);
          var risque = option.data('risque');
          
          // Garder l'option par défaut
          if (option.val() === '') {
            return;
          }
          
          // Filtrer selon la catégorie
          if (selectedCategory === 'V' && risque !== 'V') {
            option.remove();
          } else if (selectedCategory === 'RD' && risque !== 'RD') {
            option.remove();
          }
        });
        
        // Réinitialiser la sélection si l'option précédente n'est plus disponible
        if (currentValue && !policyTypeSelect.find('option[value="' + currentValue + '"]').length) {
          policyTypeSelect.val('');
        }
      }
      
      // Écouter les changements de type de police
      $('input[name="policy_category"]').on('change', toggleVehicleFields);
      
      // Appel initial pour l'état par défaut
      toggleVehicleFields();      function togglePaiementRef() {
        var mode = $('#paiement_mode').val();
        var paiementRefField = $('#paiement_ref');
        
        if (mode && !['ESPECE', 'VIREMENT BANCAIRE'].includes(mode.toUpperCase())) {
          $('#paiement_ref_group').show();
          // Rendre obligatoire pour les modes autres qu'espèce et virement bancaire
          paiementRefField.attr('required', 'required');
          paiementRefField.closest('.form-group').find('label').html('Numéro de référence (chèque/effet...) <span class="text-danger">*</span>');
        } else {
          $('#paiement_ref_group').hide();
          $('#paiement_ref').val('');
          // Supprimer l'obligation pour espèce et virement bancaire
          paiementRefField.removeAttr('required');
          paiementRefField.closest('.form-group').find('label').html('Numéro de référence (chèque/effet...)');
        }
      }
      $('#paiement_mode').on('change', togglePaiementRef);
      // Appel initial pour afficher si besoin lors du rechargement (ex: validation échouée)
      togglePaiementRef();      // JavaScript to toggle the visibility of the date of echeance field
      function toggleEcheanceDate() {
        var mode = $('#paiement_mode').val();
        var echeanceDateField = $('#echeance_date');
        
        if (mode && (mode.toUpperCase() === 'CHEQUE' || mode.toUpperCase() === 'EFFET')) {
            $('#echeance_date_group').show();
            // Rendre obligatoire pour chèque et effet
            echeanceDateField.attr('required', 'required');
            echeanceDateField.closest('.form-group').find('label').html('Date d\'échéance <span class="text-danger">*</span>');
        } else {
            $('#echeance_date_group').hide();
            $('#echeance_date').val('');
            // Supprimer l'obligation pour les autres modes
            echeanceDateField.removeAttr('required');
            echeanceDateField.closest('.form-group').find('label').html('Date d\'échéance');
            
            // Si c'est en espèce ou virement bancaire, définir la date d'échéance à aujourd'hui automatiquement
            if (mode && ['ESPECE', 'VIREMENT BANCAIRE'].includes(mode.toUpperCase())) {
                var today = new Date().toISOString().split('T')[0];
                $('#echeance_date').val(today);
            }
        }
      }
      $('#paiement_mode').on('change', toggleEcheanceDate);
      toggleEcheanceDate(); // Initial call on page load
  calculateRemaining(); // Initial to set next payment field visibility
    });
  </script>
</body>

</html>
