<?php
// Récupération des demandes de congés avec gestion des exercices
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, OPTIONS");
header("Access-Control-Allow-Headers: Content-Type");

// Gère la requête OPTIONS (pré-vol CORS)
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
    http_response_code(200);
    exit();
}

header("Content-Type: application/json");

// Log des erreurs pour debug
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

$host = "192.168.0.4";
$dbname = "DemandeConge";
$username = "wpuser";
$password = "-2b/)ru5/Bi8P[7_";

// Crée une nouvelle connexion à la base de données
$conn = new mysqli($host, $username, $password, $dbname);

// Vérifie la connexion
if ($conn->connect_error) {
    error_log("Erreur connexion DB getRequests: " . $conn->connect_error);
    echo json_encode(["success" => false, "message" => "Erreur de connexion à la base de données : " . $conn->connect_error]);
    exit();
}

// Récupère l'ID utilisateur depuis les paramètres de requête GET
$userId = $_GET['user_id'] ?? null;

error_log("=== DEBUT getRequests.php ===");
error_log("getRequests - user_id reçu: " . ($userId ?? 'NULL'));
error_log("getRequests - Toutes les variables GET: " . print_r($_GET, true));

if ($userId === null) {
    error_log("getRequests - user_id manquant");
    echo json_encode(["success" => false, "message" => "ID utilisateur manquant."]);
    exit();
}

error_log("getRequests - Récupération pour user_id: $userId (type: " . gettype($userId) . ")");

// Vérifier si l'utilisateur existe
$checkUserQuery = "SELECT ID, Nom, Prenom FROM Users WHERE ID = ?";
$checkUserStmt = $conn->prepare($checkUserQuery);
if ($checkUserStmt) {
    $checkUserStmt->bind_param("i", $userId);
    $checkUserStmt->execute();
    $userResult = $checkUserStmt->get_result();
    if ($userRow = $userResult->fetch_assoc()) {
        error_log("getRequests - Utilisateur trouvé: " . $userRow['Prenom'] . " " . $userRow['Nom']);
    } else {
        error_log("getRequests - ATTENTION: Utilisateur ID $userId non trouvé dans la table Users");
    }
    $checkUserStmt->close();
}

// Fonction pour calculer les jours ouvrés (hors week-ends)
function getWorkingDays($startDate, $endDate) {
    $workingDays = 0;
    $current = new DateTime($startDate);
    $end = new DateTime($endDate);

    while ($current <= $end) {
        $dayOfWeek = (int)$current->format('N'); // 1 (Lundi) à 7 (Dimanche)
        if ($dayOfWeek < 6) { // Si ce n'est ni Samedi (6) ni Dimanche (7)
            $workingDays++;
        }
        $current->modify('+1 day');
    }
    return $workingDays;
}

try {
    // Requête pour récupérer les demandes de l'utilisateur avec les informations du type de congé
    $query = "
        SELECT 
            dc.Id,
            dc.DateDebut,
            dc.DateFin,
            dc.Statut,
            dc.DateDemande,
            dc.Commentaire,
            dc.Validateur,
            tc.Nom as TypeConge
        FROM DemandeConge dc
        JOIN TypeConge tc ON dc.TypeCongeId = tc.Id
        WHERE dc.EmployeeId = ?
        ORDER BY dc.DateDemande DESC
    ";
    
    error_log("getRequests - Requête SQL: $query");
    
    $stmt = $conn->prepare($query);
    if ($stmt === false) {
        throw new Exception("Erreur de préparation de la requête : " . $conn->error);
    }
    
    $stmt->bind_param("i", $userId);
    $stmt->execute();
    $result = $stmt->get_result();
    
    error_log("getRequests - Nombre de résultats trouvés: " . $result->num_rows);
    
    // Debug: Afficher toutes les demandes de la table pour cet utilisateur
    $debugQuery = "SELECT COUNT(*) as total FROM DemandeConge WHERE EmployeeId = ?";
    $debugStmt = $conn->prepare($debugQuery);
    if ($debugStmt) {
        $debugStmt->bind_param("i", $userId);
        $debugStmt->execute();
        $debugResult = $debugStmt->get_result();
        $debugRow = $debugResult->fetch_assoc();
        error_log("getRequests - Total demandes en DB pour user $userId: " . $debugRow['total']);
        $debugStmt->close();
    }
    
    $requests = [];
    
    while ($row = $result->fetch_assoc()) {
        error_log("getRequests - Traitement demande ID: " . $row['Id']);
        
        // Calcul des jours ouvrés
        $workingDays = getWorkingDays($row['DateDebut'], $row['DateFin']);
        
        // Mapping des types de congés pour l'affichage
        $displayType = $row['TypeConge'];
        switch ($row['TypeConge']) {
            case 'Congé payé':
                $displayType = 'Congés payés';
                break;
            case 'RTT':
                $displayType = 'RTT';
                break;
            case 'Congé maladie':
                $displayType = 'Congé maladie';
                break;
        }
        
        // Formatage des dates pour l'affichage
        $startDate = new DateTime($row['DateDebut']);
        $endDate = new DateTime($row['DateFin']);
        $submittedDate = new DateTime($row['DateDemande']);
        
        // Format d'affichage des dates
        if ($row['DateDebut'] === $row['DateFin']) {
            $dateDisplay = $startDate->format('d/m/Y');
        } else {
            $dateDisplay = $startDate->format('d/m/Y') . ' - ' . $endDate->format('d/m/Y');
        }
        
        $requests[] = [
            'id' => (int)$row['Id'],
            'type' => $displayType,
            'startDate' => $row['DateDebut'],
            'endDate' => $row['DateFin'],
            'dateDisplay' => $dateDisplay,
            'days' => $workingDays,
            'status' => $row['Statut'],
            'reason' => $row['Commentaire'] ?: 'Aucun commentaire',
            'submittedAt' => $row['DateDemande'],
            'submittedDisplay' => $submittedDate->format('d/m/Y'),
            'validator' => $row['Validateur'] ?: null
        ];
    }
    
    $stmt->close();
    
    error_log("getRequests - Demandes formatées: " . count($requests));
    error_log("getRequests - Détail des demandes: " . print_r($requests, true));
    error_log("=== FIN getRequests.php ===");
    
    echo json_encode([
        "success" => true,
        "message" => "Demandes récupérées avec succès.",
        "requests" => $requests,
        "total" => count($requests)
    ]);
    
} catch (Exception $e) {
    error_log("Erreur récupération demandes : " . $e->getMessage());
    echo json_encode([
        "success" => false,
        "message" => "Erreur lors de la récupération des demandes : " . $e->getMessage()
    ]);
}

$conn->close();
?>