<?php
/**
 * API Parking - Point d'entrée pour les requêtes
 * TransUBD - Hai El Badr
 * 
 * Ce fichier reçoit les requêtes SQL de l'application VB.NET
 * et retourne les résultats en JSON
 */

require_once 'config.php';

// Vérifier la méthode de requête
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    jsonResponse('error', 'Méthode non autorisée. Utilisez POST.');
}

// Lire le JSON du corps de la requête
$json = file_get_contents('php://input');
$data = json_decode($json, true);

if ($data === null) {
    jsonResponse('error', 'Données JSON invalides.');
}

// Vérifier la clé API
$apiKey = $data['api_key'] ?? '';
if (!verifyAPIKey($apiKey)) {
    jsonResponse('error', 'Clé API invalide.');
}

// Récupérer la requête SQL
$query = $data['query'] ?? '';
if (empty($query)) {
    jsonResponse('error', 'Aucune requête fournie.');
}

// Récupérer les paramètres (si présents)
$parameters = $data['parameters'] ?? [];

// Connexion à la base de données
$pdo = getDBConnection();
if ($pdo === null) {
    // Essayer d'obtenir plus d'informations sur l'erreur
    $errorMsg = "Erreur de connexion à la base de données";
    try {
        $dsn = "mysql:host=" . DB_HOST . ";dbname=" . DB_NAME . ";charset=utf8mb4";
        $pdoTest = new PDO($dsn, DB_USER, DB_PASS);
    } catch (PDOException $e) {
        $errorMsg .= ": " . $e->getMessage();
    }
    jsonResponse('error', $errorMsg);
}

try {
    // Préparer la requête
    $stmt = $pdo->prepare($query);
    
    // Binder les paramètres si présents
    if (!empty($parameters)) {
        foreach ($parameters as $key => $value) {
            $stmt->bindValue(':' . $key, $value);
        }
    }
    
    // Exécuter la requête
    $stmt->execute();
    
    // Vérifier le type de requête (SELECT ou autre)
    $queryUpper = strtoupper(trim($query));
    
    if (strpos($queryUpper, 'SELECT') === 0) {
        // Requête SELECT - retourner les données
        $results = $stmt->fetchAll();
        
        if ($results) {
            jsonResponse('success', 'Données récupérées avec succès.', $results);
        } else {
            jsonResponse('success', 'Aucune donnée trouvée.', []);
        }
    } else {
        // Requête INSERT, UPDATE, DELETE
        $rowCount = $stmt->rowCount();
        jsonResponse('success', 'Requête exécutée avec succès.', ['affectedRows' => $rowCount]);
    }
    
} catch (PDOException $e) {
    jsonResponse('error', 'Erreur SQL: ' . $e->getMessage());
}
?>