<?php
include 'config/connexion.php';
include 'includes/simple_log.php';
if (session_status() === PHP_SESSION_NONE) session_start();

$id = isset($_GET['id']) ? intval($_GET['id']) : 0;
$receipt = null;
$message = '';
if ($id > 0) {
    $sql = "SELECT id, policy_number, receipt_number, montant_paye, paiement_mode, paiement_ref, echeance_date, paiement_statut, client_id FROM receipts_table WHERE id = ?";
    $stmt = $conn->prepare($sql);
    $stmt->bind_param("i", $id);
    $stmt->execute();
    $stmt->bind_result($receipt_id, $policy_number, $receipt_number, $montant_paye, $paiement_mode, $paiement_ref, $echeance_date, $paiement_statut, $client_id);
    if ($stmt->fetch()) {
        $receipt = array(
            'id' => $receipt_id,
            'policy_number' => $policy_number,
            'receipt_number' => $receipt_number,
            'montant_paye' => $montant_paye,
            'paiement_mode' => $paiement_mode,
            'paiement_ref' => $paiement_ref,
            'echeance_date' => $echeance_date,
            'paiement_statut' => $paiement_statut,
            'client_id' => $client_id
        );
    }
    $stmt->close();
    if (!$receipt) {
        $message = "Reçu introuvable.";
    }
} else {
    $message = "ID invalide.";
}

// Traitement de la validation/refus
if ($_SERVER['REQUEST_METHOD'] === 'POST' && $receipt) {
    $statut = isset($_POST['statut']) ? intval($_POST['statut']) : 0;
    if ($statut === 1 || $statut === 3) {
        $update = $conn->prepare("UPDATE receipts_table SET paiement_statut = ? WHERE id = ?");
        $update->bind_param("ii", $statut, $id);
        $update->execute();
        $update->close();
        $message = ($statut === 1) ? "Le paiement a été validé." : "Le paiement a été reffusé.";
        // Recharger le reçu pour affichage du nouveau statut
        $sql = "SELECT id, policy_number, receipt_number, montant_paye, paiement_mode, paiement_ref, echeance_date, paiement_statut, client_id FROM receipts_table WHERE id = ?";
        $stmt = $conn->prepare($sql);
        $stmt->bind_param("i", $id);
        $stmt->execute();
        $stmt->bind_result($receipt_id, $policy_number, $receipt_number, $montant_paye, $paiement_mode, $paiement_ref, $echeance_date, $paiement_statut, $client_id);
        if ($stmt->fetch()) {
            $receipt = array(
                'id' => $receipt_id,
                'policy_number' => $policy_number,
                'receipt_number' => $receipt_number,
                'montant_paye' => $montant_paye,
                'paiement_mode' => $paiement_mode,
                'paiement_ref' => $paiement_ref,
                'echeance_date' => $echeance_date,
                'paiement_statut' => $paiement_statut,
                'client_id' => $client_id
            );
        }
        $stmt->close();

        // Supposons que vous avez les variables suivantes après validation :
        $policy_number = $receipt['policy_number']; // ou récupérez le numéro de police concerné
        $receipt_id = $receipt['id']; // ou l'id du paiement validé
        $agent = isset($_SESSION['user_name']) ? $_SESSION['user_name'] : 'Inconnu';

        // Après avoir validé le paiement (paiement_statut = 1)
        if ($statut === 1) {            // Récupérer le montant payé et la référence si besoin
            $sql = "SELECT montant_paye, paiement_mode, paiement_ref, receipt_number FROM receipts_table WHERE id = ?";
            $stmt = $conn->prepare($sql);
            $stmt->bind_param("i", $receipt_id);
            $stmt->execute();
            $stmt->bind_result($montant_paye, $paiement_mode, $paiement_ref, $receipt_number);
            $stmt->fetch();
            $stmt->close();

            // Valider tous les paiements ayant le même mode et le même numéro de chèque/effet
            if ($paiement_mode && $paiement_ref) {
                $updateAll = $conn->prepare("UPDATE receipts_table SET paiement_statut = 1 WHERE paiement_mode = ? AND paiement_ref = ?");
                $updateAll->bind_param("ss", $paiement_mode, $paiement_ref);
                $updateAll->execute();
                $updateAll->close();
            }

            // Mettre à jour policy_table : ajouter au montant_paye et soustraire de total_reste
            $sql_update_policy = "UPDATE policy_table 
                SET montant_paye = IFNULL(montant_paye,0) + ?, 
                    total_reste = IFNULL(total_reste,0) - ?
                WHERE n_policy = ?";
            $stmt_update = $conn->prepare($sql_update_policy);
            $stmt_update->bind_param("dds", $montant_paye, $montant_paye, $policy_number);
            $stmt_update->execute();
            $stmt_update->close();

            // Mettre à jour le reste_a_payer dans receipts_table pour tous les reçus de cette police
            $sql_get_total = "SELECT montant_to_paie FROM policy_table WHERE n_policy = ?";
            $stmt_get = $conn->prepare($sql_get_total);
            $stmt_get->bind_param("s", $policy_number);
            $stmt_get->execute();
            $stmt_get->bind_result($montant_to_paie);
            $stmt_get->fetch();
            $stmt_get->close();

            // Calculer la somme des paiements validés
            $sql_sum_valides = "SELECT SUM(montant_paye) as total_valides FROM receipts_table WHERE policy_number = ? AND paiement_statut = 1";
            $stmt_sum = $conn->prepare($sql_sum_valides);
            $stmt_sum->bind_param("s", $policy_number);
            $stmt_sum->execute();
            $stmt_sum->bind_result($total_valides);
            $stmt_sum->fetch();
            $stmt_sum->close();

            // Calculer le nouveau reste
            $nouveau_reste = floatval($montant_to_paie) - floatval($total_valides ?? 0);

            // Mettre à jour tous les reçus de cette police
            $sql_update_receipts = "UPDATE receipts_table SET reste_a_payer = ? WHERE policy_number = ?";
            $stmt_update_receipts = $conn->prepare($sql_update_receipts);
            $stmt_update_receipts->bind_param("ds", $nouveau_reste, $policy_number);
            $stmt_update_receipts->execute();
            $stmt_update_receipts->close();

            // Construire le détail de l'opération
            $operation = "Validation paiement";
            $details = [];
            $details[] = "Montant validé : " . number_format($montant_paye, 2, ',', ' ') . " DH";
            if ($paiement_mode) {
                $details[] = "Mode : " . htmlspecialchars($paiement_mode);
            }
            if ($paiement_ref) {
                $details[] = "Réf : " . htmlspecialchars($paiement_ref);            }
            $operation .= " (" . implode(' | ', $details) . ")";

            $currentDateTime = date('Y-m-d H:i:s');
              // Enregistrer la validation dans le log global
            logPaymentValidation($policy_number, $montant_paye, $paiement_mode, $paiement_ref, $receipt_number, 'validation');
        }

        // Refus : refuser tous les paiements ayant le même mode et le même numéro de chèque/effet
        if ($statut === 3) {            // Récupérer le mode et la référence
            $sql = "SELECT montant_paye, paiement_mode, paiement_ref, policy_number, receipt_number FROM receipts_table WHERE id = ?";
            $stmt = $conn->prepare($sql);
            $stmt->bind_param("i", $receipt_id);
            $stmt->execute();
            $stmt->bind_result($montant_paye, $paiement_mode, $paiement_ref, $policy_number, $receipt_number);
            $stmt->fetch();
            $stmt->close();

            $montant_total_refuse = floatval($montant_paye);

            // Ne pas mettre à jour la table policy en cas de refus
            // Le montant reste non validé, donc ne doit pas être soustrait de montant_paye ni ajouté à total_reste

            // Historique refus
            $operation = "Refus paiement";
            $details = [];
            if ($paiement_mode) {
                $details[] = "Mode : " . htmlspecialchars($paiement_mode);
            }
            if ($paiement_ref) {
                $details[] = "Réf : " . htmlspecialchars($paiement_ref);            }
            $operation .= " (" . implode(' | ', $details) . ")";
            $currentDateTime = date('Y-m-d H:i:s');
              // Enregistrer le refus dans le log global
            logPaymentValidation($policy_number, $montant_paye, $paiement_mode, $paiement_ref, $receipt_number, 'refus');
        }
    }
}

if (isset($_POST['refuser']) && isset($_POST['id'])) {
    $id = intval($_POST['id']);
    // Mettre à jour le statut du paiement à refusé (2)
    $sql = "UPDATE receipts_table SET paiement_statut = 2 WHERE id = ?";
    $stmt = $conn->prepare($sql);
    $stmt->bind_param("i", $id);
    $stmt->execute();
    $stmt->close();

    // Récupérer le montant_paye et la policy_number du paiement refusé
    $sql_info = "SELECT montant_paye, policy_number FROM receipts_table WHERE id = ?";
    $stmt_info = $conn->prepare($sql_info);
    $stmt_info->bind_param("i", $id);
    $stmt_info->execute();
    $stmt_info->bind_result($montant_refuse_result, $policy_number_result);
    if ($stmt_info->fetch()) {
        $montant_refuse = floatval($montant_refuse_result);
        $policy_number = $policy_number_result;
        $stmt_info->close();

        // Mettre à jour policy_table : soustraire du montant_paye et ajouter au total_reste
        $sql_update_policy = "UPDATE policy_table 
            SET montant_paye = IFNULL(montant_paye,0) - ?, 
                total_reste = IFNULL(total_reste,0) + ?
            WHERE n_policy = ?";
        $stmt_update = $conn->prepare($sql_update_policy);
        $stmt_update->bind_param("dds", $montant_refuse, $montant_refuse, $policy_number);
        $stmt_update->execute();
        $stmt_update->close();
    } else {
        $stmt_info->close();
    }

    // ...redirection ou message de confirmation...
}
?>
<!DOCTYPE html>
<html lang="fr">
<head>
    <?php include 'includes/head.php'; ?>
</head>
<body id="page-top">
<div id="wrapper">
    <?php include 'includes/sidebar.php'; ?>
    <div id="content-wrapper" class="d-flex flex-column">
        <div id="content">
            <?php if (file_exists('includes/topbar.php')) include 'includes/topbar.php'; ?>
            <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">Validation du Paiement</h1>
                    <ol class="breadcrumb">
                        <li class="breadcrumb-item"><a href="./">Accueil</a></li>
                        <li class="breadcrumb-item"><a href="liste_cheques_effets.php">Chèques & Effets</a></li>
                        <li class="breadcrumb-item active" aria-current="page">Valider Paiement</li>
                    </ol>
                </div>
                <div class="row">
                    <div class="col-lg-8 mx-auto">
                        <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">Détails du paiement</h6>
                            </div>
                            <div class="card-body">
                                <?php if ($message): ?>
                                    <div class="alert alert-info"><?php echo htmlspecialchars($message); ?></div>
                                <?php endif; ?>
                                <?php if ($receipt): ?>
                                    <table class="table table-bordered">
                                        <tr>
                                            <th>Numéro de reçu</th>
                                            <td><?php echo htmlspecialchars($receipt['receipt_number']); ?></td>
                                        </tr>
                                        <tr>
                                            <th>Numéro de police</th>
                                            <td><?php echo htmlspecialchars($receipt['policy_number']); ?></td>
                                        </tr>
                                        <tr>
                                            <th>Montant payé</th>
                                            <td><?php echo htmlspecialchars($receipt['montant_paye']); ?> DH</td>
                                        </tr>
                                        <tr>
                                            <th>Mode</th>
                                            <td><?php echo htmlspecialchars($receipt['paiement_mode']); ?></td>
                                        </tr>
                                        <tr>
                                            <th>Numéro chèque/effet</th>
                                            <td><?php echo htmlspecialchars($receipt['paiement_ref']); ?></td>
                                        </tr>
                                        <tr>
                                            <th>Date d'échéance</th>
                                            <td>
                                                <?php
                                                if (!empty($receipt['echeance_date'])) {
                                                    echo htmlspecialchars(date('d/m/Y', strtotime($receipt['echeance_date'])));
                                                } else {
                                                    echo '-';
                                                }
                                                ?>
                                            </td>
                                        </tr>
                                        <tr>
                                            <th>Statut actuel</th>
                                            <td>
                                                <?php
                                                if ($receipt['paiement_statut'] == 1) {
                                                    echo '<span class="badge badge-success">Validé</span>';
                                                } elseif ($receipt['paiement_statut'] == 3) {
                                                    echo '<span class="badge badge-danger">Reffusé</span>';
                                                } else {
                                                    echo '<span class="badge badge-warning">En cours</span>';
                                                }
                                                ?>
                                            </td>
                                        </tr>
                                    </table>
                                    <?php if ($receipt['paiement_statut'] == 0): ?>
                                        <form method="POST" class="mt-3">
                                            <div class="form-group">
                                                <label>Action :</label><br>
                                                <button type="submit" name="statut" value="1" class="btn btn-success mr-2">Valider</button>
                                                <button type="submit" name="statut" value="3" class="btn btn-danger">Reffuser</button>
                                                <a href="liste_cheques_effets.php" class="btn btn-secondary ml-2">Annuler</a>
                                            </div>
                                        </form>
                                    <?php else: ?>
                                        <br>
                                        <a href="liste_cheques_effets.php" class="btn btn-secondary">Retour à la liste</a>
                                    <?php endif; ?>
                                <?php else: ?>
                                    <div class="alert alert-danger">Aucun reçu trouvé.</div>
                                <?php endif; ?>
                            </div>
                        </div>
                    </div>
                </div>
                <!--Row-->
            </div>
            <!---Container Fluid-->
        </div>
        <?php include ('includes/footer.php'); ?>
    </div>
</div>
<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>
</body>
</html>
</body>
</html>
