<?php
/**
 * Script pour synchroniser les paiements mensuels avec la table income
 */

// Inclusion des fichiers nécessaires
require_once 'config.php';
require_once 'database/init.php';
require_once 'includes/functions.php';

// Fonction pour formater les montants
function formatAmount($amount) {
    return number_format($amount, 2) . ' د.م.';
}

// Fonction pour vérifier si un paiement mensuel a déjà été ajouté comme revenu
function checkMonthlyPaymentIncome($memberId, $paymentMonth) {
    global $db;
    
    $query = "SELECT COUNT(*) as count FROM income 
              WHERE source = 'monthly_subscription' 
              AND member_id = ? 
              AND notes LIKE ?";
    
    $stmt = $db->prepare($query);
    $stmt->execute([$memberId, "%Paiement mensuel pour $paymentMonth%"]);
    $result = $stmt->fetch(PDO::FETCH_ASSOC);
    
    return $result && $result['count'] > 0;
}

// Récupération de tous les paiements mensuels avec le statut "paid"
$query = "SELECT mp.*, m.first_name, m.last_name 
          FROM monthly_payments mp
          JOIN members m ON mp.member_id = m.id
          WHERE mp.payment_status = 'paid'";

$stmt = $db->prepare($query);
$stmt->execute();
$payments = $stmt->fetchAll(PDO::FETCH_ASSOC);

echo "<h1>Synchronisation des paiements mensuels avec la table income</h1>";
echo "<p>Nombre de paiements mensuels à traiter : " . count($payments) . "</p>";

$addedCount = 0;
$skippedCount = 0;

echo "<table border='1' cellpadding='5'>";
echo "<tr><th>ID</th><th>Membre</th><th>Mois</th><th>Montant</th><th>Statut</th><th>Action</th></tr>";

foreach ($payments as $payment) {
    $memberId = $payment['member_id'];
    $memberName = $payment['first_name'] . ' ' . $payment['last_name'];
    $paymentMonth = $payment['payment_month'];
    $amount = $payment['amount_paid'];
    $paymentMethod = $payment['payment_method'];
    $paymentDate = $payment['payment_date'];
    
    // Vérification si le paiement a déjà été ajouté comme revenu
    $alreadyAdded = checkMonthlyPaymentIncome($memberId, $paymentMonth);
    
    echo "<tr>";
    echo "<td>" . $payment['id'] . "</td>";
    echo "<td>" . $memberName . "</td>";
    echo "<td>" . $paymentMonth . "</td>";
    echo "<td>" . formatAmount($amount) . "</td>";
    echo "<td>" . $payment['payment_status'] . "</td>";
    
    if ($alreadyAdded) {
        echo "<td>Déjà ajouté comme revenu</td>";
        $skippedCount++;
    } else {
        // Ajout du paiement comme revenu
        $userId = isset($_SESSION['user_id']) ? $_SESSION['user_id'] : 1; // Administrateur par défaut
        
        try {
            $query = "INSERT INTO income (member_id, amount, source, payment_date, payment_method, notes, created_by) 
                      VALUES (?, ?, 'monthly_subscription', ?, ?, ?, ?)";
            $stmt = $db->prepare($query);
            $notes = "Paiement mensuel pour $paymentMonth";
            $result = $stmt->execute([$memberId, $amount, $paymentDate, $paymentMethod, $notes, $userId]);
            
            if ($result) {
                echo "<td style='color:green;'>Ajouté comme revenu</td>";
                $addedCount++;
            } else {
                echo "<td style='color:red;'>Erreur lors de l'ajout comme revenu</td>";
            }
        } catch (Exception $e) {
            echo "<td style='color:red;'>Erreur : " . $e->getMessage() . "</td>";
        }
    }
    
    echo "</tr>";
}

echo "</table>";

echo "<h2>Résumé</h2>";
echo "<ul>";
echo "<li>Paiements traités : " . count($payments) . "</li>";
echo "<li>Paiements ajoutés comme revenus : " . $addedCount . "</li>";
echo "<li>Paiements déjà ajoutés (ignorés) : " . $skippedCount . "</li>";
echo "</ul>";

echo "<p><a href='dashboard.php' class='btn btn-primary'>Retour au tableau de bord</a></p>";
?>