<?php
/**
 * API pour la gestion des Opérateurs
 * Répertoire: Includes/Tables/
 * 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']) {
    $method = $_SERVER['REQUEST_METHOD'];
    if ($method !== 'GET') {
        http_response_code(401);
        echo json_encode(['success' => false, 'message' => $auth['message']]);
        exit;
    }
}

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

try {
    if ($method === 'GET') {
        if ($action === 'list') {
            $query = "SELECT * FROM Operateurs WHERE 1=1";
            $params = [];
            
            if ($siteFilter && $siteFilter !== 'Siège') {
                $query .= " AND Site = ?";
                $params[] = $siteFilter;
            }
            
            $query .= " ORDER BY OperateurID";
            
            $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 * FROM Operateurs WHERE OperateurID = ?");
            $stmt->execute([$_GET['id']]);
            $operateur = $stmt->fetch();
            echo json_encode(['success' => (bool)$operateur, 'data' => $operateur]);
            exit;
        }
        
        http_response_code(400);
        echo json_encode(['success' => false, 'message' => 'Action GET invalide']);
        exit;
    }

    // Vérifier l'authentification pour les actions POST, PUT, DELETE
    if (!$auth['success']) {
        http_response_code(401);
        echo json_encode(['success' => false, 'message' => 'Authentification requise']);
        exit;
    }

    $inputJson = file_get_contents('php://input');
    $input = json_decode($inputJson, true);
    $input = sanitizeInput($input);

    if ($method === 'POST') {
        $operateurId = $input['OperateurID'] ?? null;
        $nomOperateur = $input['NomOperateur'] ?? null;
        
        if (!$operateurId || !$nomOperateur) {
            http_response_code(400);
            echo json_encode(['success' => false, 'message' => 'Champs requis manquants']);
            exit;
        }

        // Vérifier duplication
        $stmt = $pdo->prepare("SELECT COUNT(*) FROM Operateurs WHERE OperateurID = ?");
        $stmt->execute([$operateurId]);
        if ($stmt->fetchColumn() > 0) {
            http_response_code(409);
            echo json_encode(['success' => false, 'message' => "L'opérateur $operateurId existe déjà"]);
            exit;
        }

        $stmt = $pdo->prepare("
            INSERT INTO Operateurs (OperateurID, NomOperateur, Adresse, RC, AI, MF, Code_Com, Contact, Tel, Mobile, Fax, Email, NbreBus, Mode_Paiement,Etat, Site, UserID, Date_Modif) 
            VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
        ");
        
        $ok = $stmt->execute([
            $operateurId,
            $input['NomOperateur'] ?? '',
            $input['Adresse'] ?? '',
            $input['RC'] ?? '',
            $input['AI'] ?? '',
            $input['MF'] ?? '',
            $input['Code_Com'] ?? '',
            $input['Contact'] ?? '',
            $input['Tel'] ?? '',
            $input['Mobile'] ?? '',
            $input['Fax'] ?? '',
            $input['Email'] ?? '',
            $input['NbreBus'] ?? 0,
            $input['Mode_Paiement'] ?? 'Espèce',
            $input['Etat'] ?? 'Actif',
            $input['Site'] ?? '',
            $auth['user_id'] ?? 'System',
            date('Y-m-d H:i:s')
        ]);
        
        logAction($pdo, $auth['user_id'], 'CREATE_OPERATEUR', $operateurId);
        
        echo json_encode(['success' => $ok]);
        exit;
    }

    if ($method === 'PUT') {
        $operateurId = $input['OperateurID'] ?? null;
        if (!$operateurId) {
            http_response_code(400);
            echo json_encode(['success' => false, 'message' => 'OperateurID requis']);
            exit;
        }

        $stmt = $pdo->prepare("
            UPDATE Operateurs SET 
                NomOperateur = ?, Adresse = ?, RC = ?, AI = ?, MF = ?, 
                Code_Com = ?, Contact = ?, Tel = ?, Mobile = ?, Fax = ?, Email = ?, 
                Mode_Paiement = ?,Etat = ?, UserID = ?, Date_Modif = ?
            WHERE OperateurID = ?
        ");
        
        $ok = $stmt->execute([
            $input['NomOperateur'] ?? '',
            $input['Adresse'] ?? '',
            $input['RC'] ?? '',
            $input['AI'] ?? '',
            $input['MF'] ?? '',
            $input['Code_Com'] ?? '',
            $input['Contact'] ?? '',
            $input['Tel'] ?? '',
            $input['Mobile'] ?? '',
            $input['Fax'] ?? '',
            $input['Email'] ?? '',
            $input['Mode_Paiement'] ?? 'Espèce',
            $input['Etat'] ?? 'Actif',
            $auth['user_id'] ?? 'System',
            date('Y-m-d H:i:s'),
            $operateurId
        ]);
        
        logAction($pdo, $auth['user_id'], 'UPDATE_OPERATEUR', $operateurId);
        
        echo json_encode(['success' => $ok]);
        exit;
    }

    if ($method === 'DELETE') {
        $operateurId = $input['OperateurID'] ?? ($_GET['id'] ?? null);
        if (!$operateurId) {
            http_response_code(400);
            echo json_encode(['success' => false, 'message' => 'OperateurID requis']);
            exit;
        }
        
        $stmt = $pdo->prepare("DELETE FROM Operateurs WHERE OperateurID = ?");
        $ok = $stmt->execute([$operateurId]);
        
        logAction($pdo, $auth['user_id'], 'DELETE_OPERATEUR', $operateurId);
        
        echo json_encode(['success' => $ok]);
        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 API Opérateurs: ' . $e->getMessage()]);
}

function logAction($pdo, $userId, $action, $target) {
    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,
            "API: $action sur $target"
        ]);
    } catch (Exception $e) {
        // Ne pas bloquer si la journalisation échoue
    }
}
?>
