<?php
/**
 * API pour les feuilles de route
 * Répertoire: Includes/Commercial/
 * Sécurisée avec authentification
 */

include_once __DIR__ . '/../auth_check.php';

// Rate limiting par IP
checkRateLimit($_SERVER['REMOTE_ADDR'] ?? 'unknown');

// Connexion à la base de données
$pdo = getDbConnection();

// Vérifier l'authentification
$auth = checkApiAuth($pdo);
if (!$auth['success']) {
    http_response_code(401);
    echo json_encode(['success' => false, 'message' => 'Authentification requise']);
    exit;
}

$method = $_SERVER['REQUEST_METHOD'];
$action = $_GET['action'] ?? '';

try {
    if ($method === 'GET') {
        if ($action === 'list') {
            // Liste des feuilles de route avec filtres
            $siteId = $_GET['site_id'] ?? null;
            $date = $_GET['date'] ?? date('Y-m-d');
            $statut = $_GET['statut'] ?? null;
            
            $query = "
                SELECT f.*, u.nom as operateur_nom, u.prenom as operateur_prenom,
                       b.Matricule as bus_matricule, l.NomLigne as ligne_nom,
                       s.Nom_Site as site_nom
                FROM Feuilles f
                LEFT JOIN Utilisateurs u ON f.OperateurID = u.code_utilisateur
                LEFT JOIN BusGares b ON f.BusID = b.BusID
                LEFT JOIN Lignes l ON f.LigneID = l.LigneID
                LEFT JOIN Sites s ON f.SiteID = s.SiteID
                WHERE 1=1
            ";
            $params = [];
            
            if ($date) {
                $query .= " AND DATE(f.DateCreation) = ?";
                $params[] = $date;
            }
            
            if ($siteId) {
                $query .= " AND f.SiteID = ?";
                $params[] = $siteId;
            }
            
            if ($statut) {
                $query .= " AND f.Statut = ?";
                $params[] = $statut;
            }
            
            $query .= " ORDER BY f.DateCreation DESC, f.HeureCreation DESC";
            
            $stmt = $pdo->prepare($query);
            $stmt->execute($params);
            echo json_encode(['success' => true, 'data' => $stmt->fetchAll()]);
            exit;
        }
        
        if ($action === 'get' && isset($_GET['id'])) {
            $stmt = $pdo->prepare("
                SELECT f.*, u.nom as operateur_nom, u.prenom as operateur_prenom,
                       b.Matricule as bus_matricule, l.NomLigne as ligne_nom,
                       s.Nom_Site as site_nom
                FROM Feuilles f
                LEFT JOIN Utilisateurs u ON f.OperateurID = u.code_utilisateur
                LEFT JOIN BusGares b ON f.BusID = b.BusID
                LEFT JOIN Lignes l ON f.LigneID = l.LigneID
                LEFT JOIN Sites s ON f.SiteID = s.SiteID
                WHERE f.FeuilleID = ?
            ");
            $stmt->execute([$_GET['id']]);
            $feuille = $stmt->fetch();
            echo json_encode(['success' => (bool)$feuille, 'data' => $feuille]);
            exit;
        }
        
        if ($action === 'departures') {
            // Liste des départs pour une feuille de route
            $feuilleId = $_GET['feuille_id'] ?? null;
            
            if (!$feuilleId) {
                http_response_code(400);
                echo json_encode(['success' => false, 'message' => 'feuille_id requis']);
                exit;
            }
            
            $stmt = $pdo->prepare("
                SELECT d.*, l.NomLigne as ligne_nom, arret.NomArret as arret_nom
                FROM Departs d
                LEFT JOIN Lignes l ON d.LigneID = l.LigneID
                LEFT JOIN Arrets arret ON d.ArretID = arret.ArretID
                WHERE d.FeuilleID = ?
                ORDER BY d.HeureDepart
            ");
            $stmt->execute([$feuilleId]);
            echo json_encode(['success' => true, 'data' => $stmt->fetchAll()]);
            exit;
        }
        
        http_response_code(400);
        echo json_encode(['success' => false, 'message' => 'Action invalide']);
        exit;
    }
    
    if ($method === 'POST') {
        $inputJson = file_get_contents('php://input');
        $input = json_decode($inputJson, true);
        $input = sanitizeInput($input);
        
        $siteId = $input['SiteID'] ?? $auth['site_id'];
        $operateurId = $input['OperateurID'] ?? $auth['user_id'];
        $busId = $input['BusID'] ?? null;
        $ligneId = $input['LigneID'] ?? null;
        
        if (!$siteId || !$busId || !$ligneId) {
            http_response_code(400);
            echo json_encode(['success' => false, 'message' => 'SiteID, BusID et LigneID requis']);
            exit;
        }
        
        $stmt = $pdo->prepare("
            INSERT INTO Feuilles (SiteID, OperateurID, BusID, LigneID, DateCreation, Statut)
            VALUES (?, ?, ?, ?, ?, 'EN_COURS')
        ");
        
        $now = new DateTime();
        $ok = $stmt->execute([
            $siteId,
            $operateurId,
            $busId,
            $ligneId,
            $now->format('Y-m-d H:i:s')
        ]);
        
        $feuilleId = $pdo->lastInsertId();
        
        // Journaliser
        logAction($pdo, $auth['user_id'], 'CREATE_FEUILLE', 
            "FeuilleID: $feuilleId, BusID: $busId, LigneID: $ligneId");
        
        echo json_encode(['success' => $ok, 'id' => $feuilleId]);
        exit;
    }
    
    if ($method === 'PUT') {
        $inputJson = file_get_contents('php://input');
        $input = json_decode($inputJson, true);
        $input = sanitizeInput($input);
        
        $feuilleId = $input['FeuilleID'] ?? null;
        $statut = $input['Statut'] ?? null;
        
        if (!$feuilleId) {
            http_response_code(400);
            echo json_encode(['success' => false, 'message' => 'FeuilleID requis']);
            exit;
        }
        
        $updates = [];
        $params = [];
        
        if ($statut) {
            $updates[] = "Statut = ?";
            $params[] = $statut;
        }
        
        if (!empty($updates)) {
            $params[] = $feuilleId;
            $query = "UPDATE Feuilles SET " . implode(', ', $updates) . " WHERE FeuilleID = ?";
            $stmt = $pdo->prepare($query);
            $ok = $stmt->execute($params);
            
            // Journaliser
            logAction($pdo, $auth['user_id'], 'UPDATE_FEUILLE', 
                "FeuilleID: $feuilleId, Statut: $statut");
            
            echo json_encode(['success' => $ok]);
        } else {
            echo json_encode(['success' => false, 'message' => 'Aucune donnée à mettre à jour']);
        }
        exit;
    }
    
    http_response_code(405);
    echo json_encode(['success' => false, 'message' => 'Méthode non supportée']);
    
} catch (Exception $e) {
    http_response_code(500);
    echo json_encode(['success' => false, 'message' => 'Erreur: ' . $e->getMessage()]);
}

function logAction($pdo, $userId, $action, $details) {
    try {
        $stmt = $pdo->prepare("
            INSERT INTO Journalisation (DateJournal, TimeJournal, OperateurID, Action, Details) 
            VALUES (?, ?, ?, ?, ?)
        ");
        $stmt->execute([
            date('Y-m-d'),
            date('H:i:s'),
            $userId,
            $action,
            $details
        ]);
    } catch (Exception $e) {
        // Ne pas bloquer
    }
}
?>
