<?php
/**
 * Système de log simple pour edit_client.php
 * Enregistre uniquement les modifications de clients avec détails
 */

/**
 * Effectue la rotation des logs pour garder seulement 356 jours d'historique
 * @param string $logFile Chemin vers le fichier de log
 */
function rotateLogFile($logFile) {
    if (!file_exists($logFile)) {
        return;
    }
    
    // Lire toutes les lignes du fichier
    $lines = file($logFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    if (empty($lines)) {
        return;
    }
    
    $cutoffDate = date('Y-m-d', strtotime('-356 days'));
    $filteredLines = [];
    $headerAdded = false;
    
    foreach ($lines as $line) {
        // Garder les lignes de commentaire (header)
        if (substr(trim($line), 0, 1) === '#') {
            if (!$headerAdded) {
                $filteredLines[] = $line;
            }
            continue;
        }
        
        // Vérifier la date de la ligne de log
        if (preg_match('/^(\d{4}-\d{2}-\d{2})/', $line, $matches)) {
            $lineDate = $matches[1];
            // Garder seulement les lignes des 356 derniers jours
            if ($lineDate >= $cutoffDate) {
                $filteredLines[] = $line;
                $headerAdded = true;
            }
        } else {
            // Garder les lignes qui ne correspondent pas au format (pour compatibilité)
            $filteredLines[] = $line;
        }
    }
    
    // Réécrire le fichier avec les lignes filtrées
    if (count($filteredLines) < count($lines)) {
        file_put_contents($logFile, implode(PHP_EOL, $filteredLines) . PHP_EOL, LOCK_EX);
    }
}

/**
 * Enregistre une modification de client dans le log avec détails
 * @param string $clientName Nom du client
 * @param int $clientId ID du client
 * @param array $oldData Anciennes données
 * @param array $newData Nouvelles données
 */
function logClientEdit($clientName, $clientId, $oldData, $newData) {
    // Vérifier si l'utilisateur est connecté
    if (!isset($_SESSION['user_name'])) {
        return false;
    }
    
    // Préparer l'entrée de log
    $datetime = date('Y-m-d H:i:s');
    $userName = $_SESSION['user_name'];
    
    // Comparer les données et identifier les changements
    $changes = [];
    $fieldsToCheck = [
        'client_cin' => 'numéro de CIN',
        'client_name' => 'nom',
        'client_phone' => 'téléphone',
        'client_email' => 'email',
        'client_company' => 'entreprise',
        'client_genre' => 'genre',
        'client_adresse' => 'adresse',
        'n_dossier' => 'numéro de dossier',
        'client_ice' => 'ICE'
    ];
    
    foreach ($fieldsToCheck as $field => $label) {
        if (isset($oldData[$field]) && isset($newData[$field]) && $oldData[$field] != $newData[$field]) {
            $changes[] = $label . ' de "' . $oldData[$field] . '" à "' . $newData[$field] . '"';
        }
    }
      if (empty($changes)) {
        return false; // Aucun changement détecté
    }
    
    // Format: DATETIME, nom de user à changé [détails des changements] pour le client [nom] (ID: [id])
    $changesList = implode(', ', $changes);
    $logEntry = $datetime . ', ' . $userName . ' à changé ' . $changesList . ' pour le client ' . $clientName . ' (ID: ' . $clientId . ')';
    
    // Écrire dans le log
    return writeToLog($logEntry);
}

/**
 * Enregistre la création d'un nouveau client dans le log
 * @param string $clientName Nom du client
 * @param string $clientCin CIN du client
 * @param string $nDossier Numéro de dossier
 * @return bool Succès de l'écriture
 */
function logClientCreation($clientName, $clientCin, $nDossier) {
    // Préparer l'entrée de log
    $datetime = date('Y-m-d H:i:s');
    $userName = $_SESSION['user_name'];
    
    // Format: DATETIME, nom de user à ajouté le client 'nom' ayant la CIN numéro : 'cin' et le numéro de dossier (nDossier)
    $logEntry = $datetime . ', ' . $userName . ' à ajouté le client \'' . $clientName . '\' ayant la CIN numéro : \'' . $clientCin . '\' et le numéro de dossier (' . $nDossier . ')';
      // Écrire dans le log
    return writeToLog($logEntry);
}

/**
 * Enregistre la suppression d'un client dans le log
 * @param string $clientName Nom du client
 * @param string $clientCin CIN du client
 * @param string $nDossier Numéro de dossier
 * @return bool Succès de l'écriture
 */
function logClientDeletion($clientName, $clientCin, $nDossier) {
    // Vérifier si l'utilisateur est connecté
    if (!isset($_SESSION['user_name'])) {
        return false;
    }
    
    // Récupérer la référence de compagnie depuis la session, ou utiliser une valeur par défaut
    $compagnieRef = isset($_SESSION['compagnie_ref']) ? $_SESSION['compagnie_ref'] : '123456';
    
    // Créer le dossier data/[compagnie_ref] s'il n'existe pas
    $logDir = __DIR__ . '/../data/' . $compagnieRef;
    if (!is_dir($logDir)) {
        @mkdir($logDir, 0755, true);
    }
    
    // Fichier de log
    $logFile = $logDir . '/journal.log';
    
    // Préparer l'entrée de log
    $datetime = date('Y-m-d H:i:s');
    $userName = $_SESSION['user_name'];
    
    // Format: DATETIME, nom de user à supprimé le client 'nom' ayant la CIN numéro : 'cin' et le numéro de dossier (nDossier)
    $logEntry = $datetime . ', ' . $userName . ' à supprimé le client \'' . $clientName . '\' ayant la CIN numéro : \'' . $clientCin . '\' et le numéro de dossier (' . $nDossier . ')' . PHP_EOL;
    
    // Écrire dans le fichier
    $result = @file_put_contents($logFile, $logEntry, FILE_APPEND | LOCK_EX);
    
    return $result !== false;
}

/**
 * Enregistre la création d'une nouvelle police dans le log
 * @param string $policyNumber Numéro de la police
 * @param string $clientCin CIN du client
 * @return bool Succès de l'écriture
 */
function logPolicyCreation($policyNumber, $clientCin) {
    // Vérifier si l'utilisateur est connecté
    if (!isset($_SESSION['user_name'])) {
        return false;
    }
    
    // Récupérer la référence de compagnie depuis la session, ou utiliser une valeur par défaut
    $compagnieRef = isset($_SESSION['compagnie_ref']) ? $_SESSION['compagnie_ref'] : '123456';
    
    // Créer le dossier data/[compagnie_ref] s'il n'existe pas
    $logDir = __DIR__ . '/../data/' . $compagnieRef;
    if (!is_dir($logDir)) {
        @mkdir($logDir, 0755, true);
    }
    
    // Fichier de log
    $logFile = $logDir . '/journal.log';
    
    // Préparer l'entrée de log
    $datetime = date('Y-m-d H:i:s');
    $userName = $_SESSION['user_name'];
    
    // Format: DATETIME, nom de user à créé la police (numero) pour le client CIN
    $logEntry = $datetime . ', ' . $userName . ' à créé la police (' . $policyNumber . ') pour le client CIN ' . $clientCin . PHP_EOL;
    
    // Écrire dans le fichier
    $result = @file_put_contents($logFile, $logEntry, FILE_APPEND | LOCK_EX);
    
    return $result !== false;
}

/**
 * Enregistre la modification d'une police dans le log
 * @param string $policyNumber Numéro de la police
 * @param array $oldData Anciennes données
 * @param array $newData Nouvelles données
 * @return bool Succès de l'écriture
 */
function logPolicyEdit($policyNumber, $oldData, $newData) {
    // Vérifier si l'utilisateur est connecté
    if (!isset($_SESSION['user_name'])) {
        return false;
    }
    
    // Récupérer la référence de compagnie depuis la session, ou utiliser une valeur par défaut
    $compagnieRef = isset($_SESSION['compagnie_ref']) ? $_SESSION['compagnie_ref'] : '123456';
    
    // Créer le dossier data/[compagnie_ref] s'il n'existe pas
    $logDir = __DIR__ . '/../data/' . $compagnieRef;
    if (!is_dir($logDir)) {
        @mkdir($logDir, 0755, true);
    }
    
    // Fichier de log
    $logFile = $logDir . '/journal.log';
    
    // Préparer l'entrée de log
    $datetime = date('Y-m-d H:i:s');
    $userName = $_SESSION['user_name'];
    
    // Comparer les données et identifier les changements
    $changes = [];
    $fieldsToCheck = [
        'client_cin' => 'CIN client',
        'client_name' => 'nom client',
        'immatriculation' => 'immatriculation',
        'n_policy' => 'numéro de police',
        'start_date' => 'date début',
        'end_date' => 'date fin',
        'montant_to_paie' => 'montant à payer',
        'marque' => 'marque'
    ];
    
    foreach ($fieldsToCheck as $field => $label) {
        if (isset($oldData[$field]) && isset($newData[$field]) && $oldData[$field] != $newData[$field]) {
            $changes[] = $label . ' de "' . $oldData[$field] . '" à "' . $newData[$field] . '"';
        }
    }
    
    if (empty($changes)) {
        return false; // Aucun changement détecté
    }
    
    // Format: DATETIME, nom de user à modifié [détails des changements] pour la police [numero]
    $changesList = implode(', ', $changes);
    $logEntry = $datetime . ', ' . $userName . ' à modifié ' . $changesList . ' pour la police (' . $policyNumber . ')' . PHP_EOL;
    
    // Écrire dans le fichier
    $result = @file_put_contents($logFile, $logEntry, FILE_APPEND | LOCK_EX);
    
    return $result !== false;
}

/**
 * Enregistre un paiement dans le log
 * @param string $policyNumber Numéro de la police
 * @param float $montantPaye Montant payé
 * @param string $modePaiement Mode de paiement
 * @param string $refPaiement Référence de paiement (optionnel)
 * @param string $receiptNumber Numéro de reçu
 * @return bool Succès de l'écriture
 */
function logPayment($policyNumber, $montantPaye, $modePaiement, $refPaiement = '', $receiptNumber = '') {
    // Vérifier si l'utilisateur est connecté
    if (!isset($_SESSION['user_name'])) {
        return false;
    }
    
    // Récupérer la référence de compagnie depuis la session, ou utiliser une valeur par défaut
    $compagnieRef = isset($_SESSION['compagnie_ref']) ? $_SESSION['compagnie_ref'] : '123456';
    
    // Créer le dossier data/[compagnie_ref] s'il n'existe pas
    $logDir = __DIR__ . '/../data/' . $compagnieRef;
    if (!is_dir($logDir)) {
        @mkdir($logDir, 0755, true);
    }
    
    // Fichier de log
    $logFile = $logDir . '/journal.log';
    
    // Préparer l'entrée de log
    $datetime = date('Y-m-d H:i:s');
    $userName = $_SESSION['user_name'];
      // Préparer les détails du paiement
    $details = [];
    $details[] = 'montant : ' . number_format($montantPaye, 2, ',', ' ') . ' DH';
    $details[] = 'mode : ' . $modePaiement;
    if (!empty($refPaiement)) {
        $details[] = 'référence : ' . $refPaiement;
    }
    if (!empty($receiptNumber)) {
        $details[] = 'reçu : ' . $receiptNumber;
    }
    
    // Format: DATETIME, nom de user à enregistré un paiement pour la police (numero) [détails]
    $detailsList = implode(', ', $details);
    $logEntry = $datetime . ', ' . $userName . ' à enregistré un paiement pour la police (' . $policyNumber . ') - ' . $detailsList . PHP_EOL;
    
    // Écrire dans le fichier
    $result = @file_put_contents($logFile, $logEntry, FILE_APPEND | LOCK_EX);
    
    return $result !== false;
}

/**
 * Enregistre une validation ou un refus de paiement dans le log
 * @param string $policyNumber Numéro de la police
 * @param float $montantPaye Montant payé
 * @param string $modePaiement Mode de paiement
 * @param string $refPaiement Référence de paiement (optionnel)
 * @param string $receiptNumber Numéro de reçu
 * @param string $action 'validation' ou 'refus'
 * @return bool Succès de l'écriture
 */
function logPaymentValidation($policyNumber, $montantPaye, $modePaiement, $refPaiement = '', $receiptNumber = '', $action = 'validation') {
    // Vérifier si l'utilisateur est connecté
    if (!isset($_SESSION['user_name'])) {
        return false;
    }
    
    // Récupérer la référence de compagnie depuis la session, ou utiliser une valeur par défaut
    $compagnieRef = isset($_SESSION['compagnie_ref']) ? $_SESSION['compagnie_ref'] : '123456';
    
    // Créer le dossier data/[compagnie_ref] s'il n'existe pas
    $logDir = __DIR__ . '/../data/' . $compagnieRef;
    if (!is_dir($logDir)) {
        @mkdir($logDir, 0755, true);
    }
    
    // Fichier de log
    $logFile = $logDir . '/journal.log';
    
    // Préparer l'entrée de log
    $datetime = date('Y-m-d H:i:s');
    $userName = $_SESSION['user_name'];
    
    // Préparer les détails du paiement
    $details = [];
    $details[] = 'montant : ' . number_format($montantPaye, 2, ',', ' ') . ' DH';
    $details[] = 'mode : ' . $modePaiement;    if (!empty($refPaiement)) {
        $details[] = 'référence : ' . $refPaiement;
    }
    if (!empty($receiptNumber)) {
        $details[] = 'reçu : ' . $receiptNumber;
    }
    
    // Format selon l'action
    $actionText = ($action === 'validation') ? 'validé' : 'refusé';
    $detailsList = implode(', ', $details);
    $logEntry = $datetime . ', ' . $userName . ' à ' . $actionText . ' un paiement pour la police (' . $policyNumber . ') - ' . $detailsList . PHP_EOL;
    
    // Écrire dans le fichier
    $result = @file_put_contents($logFile, $logEntry, FILE_APPEND | LOCK_EX);
    
    return $result !== false;
}

/**
 * Enregistre la création d'une facture dans le log
 * @param string $factureNumber Numéro de la facture
 * @param string $clientName Nom du client
 * @param string $clientCin CIN du client
 * @param float $montant Montant de la facture
 * @return bool Succès de l'écriture
 */
function logFactureCreation($factureNumber, $clientName, $clientCin, $montant) {
    // Vérifier si l'utilisateur est connecté
    if (!isset($_SESSION['user_name'])) {
        return false;
    }
    
    // Récupérer la référence de compagnie depuis la session, ou utiliser une valeur par défaut
    $compagnieRef = isset($_SESSION['compagnie_ref']) ? $_SESSION['compagnie_ref'] : '123456';
    
    // Créer le dossier data/[compagnie_ref] s'il n'existe pas
    $logDir = __DIR__ . '/../data/' . $compagnieRef;
    if (!is_dir($logDir)) {
        @mkdir($logDir, 0755, true);
    }
    
    // Fichier de log
    $logFile = $logDir . '/journal.log';
    
    // Préparer l'entrée de log
    $datetime = date('Y-m-d H:i:s');
    $userName = $_SESSION['user_name'];
    
    // Format: DATETIME, nom de user à créé la facture (numero) pour le client 'nom' (CIN: cin) - montant : XX,XX DH
    $logEntry = $datetime . ', ' . $userName . ' à créé la facture (' . $factureNumber . ') pour le client \'' . $clientName . '\' (CIN: ' . $clientCin . ') - montant : ' . number_format($montant, 2, ',', ' ') . ' DH' . PHP_EOL;
    
    // Écrire dans le fichier
    $result = @file_put_contents($logFile, $logEntry, FILE_APPEND | LOCK_EX);
    
    return $result !== false;
}

/**
 * Enregistre la création d'une nouvelle marque dans le log
 * @param string $marque Nom de la marque
 * @return bool Succès de l'écriture
 */
function logMarqueCreation($marque) {
    // Vérifier si l'utilisateur est connecté
    if (!isset($_SESSION['user_name'])) {
        return false;
    }
    
    // Récupérer la référence de compagnie depuis la session, ou utiliser une valeur par défaut
    $compagnieRef = isset($_SESSION['compagnie_ref']) ? $_SESSION['compagnie_ref'] : '123456';
    
    // Créer le dossier data/[compagnie_ref] s'il n'existe pas
    $logDir = __DIR__ . '/../data/' . $compagnieRef;
    if (!is_dir($logDir)) {
        @mkdir($logDir, 0755, true);
    }
    
    // Fichier de log
    $logFile = $logDir . '/journal.log';
    
    // Préparer l'entrée de log
    $datetime = date('Y-m-d H:i:s');
    $userName = $_SESSION['user_name'];
    
    // Format: DATETIME, nom de user à ajouté la marque 'nom'
    $logEntry = $datetime . ', ' . $userName . ' à ajouté la marque \'' . $marque . '\'' . PHP_EOL;
    
    // Écrire dans le fichier
    $result = @file_put_contents($logFile, $logEntry, FILE_APPEND | LOCK_EX);
    
    return $result !== false;
}

/**
 * Enregistre la modification d'une marque dans le log
 * @param string $oldMarque Ancien nom de la marque
 * @param string $newMarque Nouveau nom de la marque
 * @return bool Succès de l'écriture
 */
function logMarqueEdit($oldMarque, $newMarque) {
    // Vérifier si l'utilisateur est connecté
    if (!isset($_SESSION['user_name'])) {
        return false;
    }
    
    // Récupérer la référence de compagnie depuis la session, ou utiliser une valeur par défaut
    $compagnieRef = isset($_SESSION['compagnie_ref']) ? $_SESSION['compagnie_ref'] : '123456';
    
    // Créer le dossier data/[compagnie_ref] s'il n'existe pas
    $logDir = __DIR__ . '/../data/' . $compagnieRef;
    if (!is_dir($logDir)) {
        @mkdir($logDir, 0755, true);
    }
    
    // Fichier de log
    $logFile = $logDir . '/journal.log';
    
    // Préparer l'entrée de log
    $datetime = date('Y-m-d H:i:s');
    $userName = $_SESSION['user_name'];
    
    // Format: DATETIME, nom de user à modifié la marque de 'ancien' à 'nouveau'
    $logEntry = $datetime . ', ' . $userName . ' à modifié la marque de \'' . $oldMarque . '\' à \'' . $newMarque . '\'' . PHP_EOL;
    
    // Écrire dans le fichier
    $result = @file_put_contents($logFile, $logEntry, FILE_APPEND | LOCK_EX);
    
    return $result !== false;
}

/**
 * Enregistre la suppression d'une marque dans le log
 * @param string $marque Nom de la marque supprimée
 * @return bool Succès de l'écriture
 */
function logMarqueDeletion($marque) {
    // Vérifier si l'utilisateur est connecté
    if (!isset($_SESSION['user_name'])) {
        return false;
    }
    
    // Récupérer la référence de compagnie depuis la session, ou utiliser une valeur par défaut
    $compagnieRef = isset($_SESSION['compagnie_ref']) ? $_SESSION['compagnie_ref'] : '123456';
    
    // Créer le dossier data/[compagnie_ref] s'il n'existe pas
    $logDir = __DIR__ . '/../data/' . $compagnieRef;
    if (!is_dir($logDir)) {
        @mkdir($logDir, 0755, true);
    }
    
    // Fichier de log
    $logFile = $logDir . '/journal.log';
    
    // Préparer l'entrée de log
    $datetime = date('Y-m-d H:i:s');
    $userName = $_SESSION['user_name'];
    
    // Format: DATETIME, nom de user à supprimé la marque 'nom'
    $logEntry = $datetime . ', ' . $userName . ' à supprimé la marque \'' . $marque . '\'' . PHP_EOL;
    
    // Écrire dans le fichier
    $result = @file_put_contents($logFile, $logEntry, FILE_APPEND | LOCK_EX);
    
    return $result !== false;
}

/**
 * Enregistre les modifications de configuration de compagnie dans le log
 * @param array $oldData Anciennes données
 * @param array $newData Nouvelles données
 * @return bool Succès de l'écriture
 */
function logCompagnieConfigEdit($oldData, $newData) {
    // Vérifier si l'utilisateur est connecté
    if (!isset($_SESSION['user_name'])) {
        return false;
    }
    
    // Récupérer la référence de compagnie depuis la session, ou utiliser une valeur par défaut
    $compagnieRef = isset($_SESSION['compagnie_ref']) ? $_SESSION['compagnie_ref'] : '123456';
    
    // Créer le dossier data/[compagnie_ref] s'il n'existe pas
    $logDir = __DIR__ . '/../data/' . $compagnieRef;
    if (!is_dir($logDir)) {
        @mkdir($logDir, 0755, true);
    }
    
    // Fichier de log
    $logFile = $logDir . '/journal.log';
    
    // Préparer l'entrée de log
    $datetime = date('Y-m-d H:i:s');
    $userName = $_SESSION['user_name'];
    
    // Comparer les données et identifier les changements
    $changes = [];
    $fieldsToCheck = [
        'compagnie_name' => 'nom de la compagnie',
        'adresse' => 'adresse',
        'tel1' => 'téléphone 1',
        'tel2' => 'téléphone 2',
        'fax' => 'fax',
        'whatsapp' => 'WhatsApp',
        'mail_1' => 'email 1',
        'mail_2' => 'email 2',
        'mail_3' => 'email 3',
        'footer' => 'pied de page',
        'logo_format' => 'format du logo',
        'logo' => 'logo'
    ];
    
    foreach ($fieldsToCheck as $field => $label) {
        if (isset($oldData[$field]) && isset($newData[$field])) {
            // Pour le logo, ne pas afficher le chemin complet
            if ($field === 'logo') {
                if ($oldData[$field] != $newData[$field]) {
                    $changes[] = $label . ' mis à jour';
                }
            } else {
                if ($oldData[$field] != $newData[$field]) {
                    $changes[] = $label . ' de "' . $oldData[$field] . '" à "' . $newData[$field] . '"';
                }
            }
        }
    }
      if (empty($changes)) {
        return false; // Aucun changement détecté
    }
    
    // Enregistrer chaque changement sur une ligne séparée
    $result = true;
    foreach ($changes as $change) {
        $logEntry = $datetime . ', ' . $userName . ' à modifié la configuration de la compagnie : ' . $change . PHP_EOL;
        $writeResult = @file_put_contents($logFile, $logEntry, FILE_APPEND | LOCK_EX);
        if ($writeResult === false) {
            $result = false;
        }
    }
      return $result;
}

/**
 * Enregistre les modifications de configuration des factures dans le log
 * @param array $oldData Anciennes données
 * @param array $newData Nouvelles données
 * @return bool Succès de l'écriture
 */
function logFactureConfigEdit($oldData, $newData) {
    // Vérifier si l'utilisateur est connecté
    if (!isset($_SESSION['user_name'])) {
        return false;
    }
    
    // Récupérer la référence de compagnie depuis la session, ou utiliser une valeur par défaut
    $compagnieRef = isset($_SESSION['compagnie_ref']) ? $_SESSION['compagnie_ref'] : '123456';
    
    // Créer le dossier data/[compagnie_ref] s'il n'existe pas
    $logDir = __DIR__ . '/../data/' . $compagnieRef;
    if (!is_dir($logDir)) {
        @mkdir($logDir, 0755, true);
    }
    
    // Fichier de log
    $logFile = $logDir . '/journal.log';
    
    // Préparer l'entrée de log
    $datetime = date('Y-m-d H:i:s');
    $userName = $_SESSION['user_name'];
      // Comparer les données et identifier les changements
    $changes = [];
    $fieldsToCheck = [
        'facture_ref' => 'référence de facture',
        'facture_prefixe' => 'préfixe des factures',
        'facture_suffixe' => 'suffixe des factures',
        'use_year_prefix' => 'utilisation de l\'année en préfixe',
        'use_monthyear_prefix' => 'utilisation du mois/année en préfixe',
        'use_year_suffix' => 'utilisation de l\'année en suffixe',
        'use_monthyear_suffix' => 'utilisation du mois/année en suffixe',
        'reset_number_yearly' => 'remise à zéro annuelle du compteur'
    ];
    
    foreach ($fieldsToCheck as $field => $label) {
        if (isset($oldData[$field]) && isset($newData[$field])) {
            if ($oldData[$field] != $newData[$field]) {
                // Pour les champs booléens, afficher Oui/Non
                if (in_array($field, ['use_year_prefix', 'use_monthyear_prefix', 'use_year_suffix', 'use_monthyear_suffix', 'reset_number_yearly'])) {
                    $oldValue = $oldData[$field] ? 'Oui' : 'Non';
                    $newValue = $newData[$field] ? 'Oui' : 'Non';
                } else {
                    $oldValue = $oldData[$field];
                    $newValue = $newData[$field];
                }
                $changes[] = $label . ' de "' . $oldValue . '" à "' . $newValue . '"';
            }
        }
    }
    
    if (empty($changes)) {
        return false; // Aucun changement détecté
    }
    
    // Enregistrer chaque changement sur une ligne séparée
    $result = true;
    foreach ($changes as $change) {
        $logEntry = $datetime . ', ' . $userName . ' à modifié la configuration des factures : ' . $change . PHP_EOL;
        $writeResult = @file_put_contents($logFile, $logEntry, FILE_APPEND | LOCK_EX);
        if ($writeResult === false) {
            $result = false;
        }
    }
      return $result;
}

/**
 * Enregistre un message général dans le log avec timestamp et utilisateur
 * @param string $message Le message à enregistrer
 * @return bool Succès de l'écriture
 */
function logMessage($message) {
    // Vérifier si l'utilisateur est connecté
    if (!isset($_SESSION['user_name'])) {
        return false;
    }
    
    // Préparer l'entrée de log avec timestamp
    $datetime = date('Y-m-d H:i:s');
    $userName = $_SESSION['user_name'];
    
    $logEntry = $datetime . ', ' . $userName . ' à ' . $message;
    
    // Écrire dans le log
    return writeToLog($logEntry);
}

/**
 * Fonction utilitaire pour écrire dans le log avec rotation automatique
 * @param string $logEntry L'entrée de log à écrire
 * @return bool Succès de l'écriture
 */
function writeToLog($logEntry) {
    // Vérifier si l'utilisateur est connecté
    if (!isset($_SESSION['user_name'])) {
        return false;
    }
    
    // Récupérer la référence de compagnie depuis la session, ou utiliser une valeur par défaut
    $compagnieRef = isset($_SESSION['compagnie_ref']) ? $_SESSION['compagnie_ref'] : '123456';
    
    // Créer le dossier data/[compagnie_ref] s'il n'existe pas
    $logDir = __DIR__ . '/../data/' . $compagnieRef;
    if (!is_dir($logDir)) {
        @mkdir($logDir, 0755, true);
    }
      // Fichier de log
    $logFile = $logDir . '/journal.log';
    
    // Effectuer la rotation des logs pour garder 356 jours (DESACTIVEE)
    // rotateLogFile($logFile);
    
    // Écrire dans le fichier
    $result = @file_put_contents($logFile, $logEntry . PHP_EOL, FILE_APPEND | LOCK_EX);
    
    return $result !== false;
}

/**
 * Enregistre la création d'un nouveau type de police dans le log
 * @param string $type Nom du type de police
 * @return bool Succès de l'écriture
 */
function logPolicyTypeCreation($type) {
    // Vérifier si l'utilisateur est connecté
    if (!isset($_SESSION['user_name'])) {
        return false;
    }
    
    // Récupérer la référence de compagnie depuis la session, ou utiliser une valeur par défaut
    $compagnieRef = isset($_SESSION['compagnie_ref']) ? $_SESSION['compagnie_ref'] : '123456';
    
    // Créer le dossier data/[compagnie_ref] s'il n'existe pas
    $logDir = __DIR__ . '/../data/' . $compagnieRef;
    if (!is_dir($logDir)) {
        @mkdir($logDir, 0755, true);
    }
    
    // Fichier de log
    $logFile = $logDir . '/journal.log';
    
    // Préparer l'entrée de log
    $datetime = date('Y-m-d H:i:s');
    $userName = $_SESSION['user_name'];
    
    // Format: DATETIME, nom de user à ajouté le type de police 'nom'
    $logEntry = $datetime . ', ' . $userName . ' à ajouté le type de police \'' . $type . '\'' . PHP_EOL;
    
    // Écrire dans le fichier
    $result = @file_put_contents($logFile, $logEntry, FILE_APPEND | LOCK_EX);
    
    return $result !== false;
}

/**
 * Enregistre la modification d'un type de police dans le log
 * @param string $oldType Ancien nom du type de police
 * @param string $newType Nouveau nom du type de police
 * @return bool Succès de l'écriture
 */
function logPolicyTypeEdit($oldType, $newType) {
    // Vérifier si l'utilisateur est connecté
    if (!isset($_SESSION['user_name'])) {
        return false;
    }
    
    // Récupérer la référence de compagnie depuis la session, ou utiliser une valeur par défaut
    $compagnieRef = isset($_SESSION['compagnie_ref']) ? $_SESSION['compagnie_ref'] : '123456';
    
    // Créer le dossier data/[compagnie_ref] s'il n'existe pas
    $logDir = __DIR__ . '/../data/' . $compagnieRef;
    if (!is_dir($logDir)) {
        @mkdir($logDir, 0755, true);
    }
    
    // Fichier de log
    $logFile = $logDir . '/journal.log';
    
    // Préparer l'entrée de log
    $datetime = date('Y-m-d H:i:s');
    $userName = $_SESSION['user_name'];
    
    // Format: DATETIME, nom de user à modifié le type de police de 'ancien' à 'nouveau'
    $logEntry = $datetime . ', ' . $userName . ' à modifié le type de police de \'' . $oldType . '\' à \'' . $newType . '\'' . PHP_EOL;
    
    // Écrire dans le fichier
    $result = @file_put_contents($logFile, $logEntry, FILE_APPEND | LOCK_EX);
    
    return $result !== false;
}

/**
 * Enregistre la suppression d'un type de police dans le log
 * @param string $type Nom du type de police supprimé
 * @return bool Succès de l'écriture
 */
function logPolicyTypeDeletion($type) {
    // Vérifier si l'utilisateur est connecté
    if (!isset($_SESSION['user_name'])) {
        return false;
    }
    
    // Récupérer la référence de compagnie depuis la session, ou utiliser une valeur par défaut
    $compagnieRef = isset($_SESSION['compagnie_ref']) ? $_SESSION['compagnie_ref'] : '123456';
    
    // Créer le dossier data/[compagnie_ref] s'il n'existe pas
    $logDir = __DIR__ . '/../data/' . $compagnieRef;
    if (!is_dir($logDir)) {
        @mkdir($logDir, 0755, true);
    }
    
    // Fichier de log
    $logFile = $logDir . '/journal.log';
    
    // Préparer l'entrée de log
    $datetime = date('Y-m-d H:i:s');
    $userName = $_SESSION['user_name'];
    
    // Format: DATETIME, nom de user à supprimé le type de police 'nom'
    $logEntry = $datetime . ', ' . $userName . ' à supprimé le type de police \'' . $type . '\'' . PHP_EOL;
    
    // Écrire dans le fichier
    $result = @file_put_contents($logFile, $logEntry, FILE_APPEND | LOCK_EX);
    
    return $result !== false;
}
?>
