<?php
// validation_functions.php
require_once __DIR__ . '/logging_functions.php';

/**
 * Prüft die URL-Parameter auf Erlaubnis und korrekte Werte.
 * Bricht bei Fehlern (z.B. ?db=prod3) sofort hart mit exit ab.
 */
function enforceValidRequest($logFile) {
    // --- NEU: DEBUG-LOGGING DES GESAMTEN AUFRUFS ---
    $requestUri = $_SERVER['REQUEST_URI'] ?? 'unknown';
    $queryString = $_SERVER['QUERY_STRING'] ?? 'no params';
    internal_debug_log("DEBUG-AUFRUF: $requestUri (Query: $queryString)", $logFile);

    // 1. Whitelist der erlaubten Parameter-Namen (um uid und poi_id ergänzt) 
    $allowedParams = ['start_id', 'end_id', 'db', 'gid', 'uid', 'poi_id', 't'];
    
    // 2. Whitelist der erlaubten Werte für die Datenbank-Wahl
    $allowedDbValues = ['prod', 'test'];

    // Wir gehen alle Parameter durch, die der User geschickt hat
    foreach ($_GET as $key => $value) {
        $isValid = true;
        $errorMsg = "";

        // CHECK A: Ist der Parameter-Name überhaupt bekannt?
        if (!in_array($key, $allowedParams)) {
            $isValid = false;
            $errorMsg = "Unerlaubter Parameter-Name: '$key'";
        }
        
        // CHECK B: Wenn 'db' genutzt wird, ist der Wert 'prod' oder 'test'?
        if ($isValid && $key === 'db' && !in_array($value, $allowedDbValues)) {
            $isValid = false;
            $errorMsg = "Ungültiger Wert für db: '$value'. Erlaubt sind nur 'prod' oder 'test'.";
        }
        
        // CHECK C: Wenn IDs genutzt werden, sind es wirklich Zahlen?
        if ($isValid && in_array($key, ['start_id', 'end_id', 'gid', 'uid', 'poi_id']) && !is_numeric($value)) {
            $isValid = false;
            $errorMsg = "Parameter '$key' muss eine Zahl sein. Erhalten: '$value'";
        }

        // --- DER HARTE ABBRUCH BEI FEHLERN ---
        if (!$isValid) {
            internal_debug_log("VALIDIERUNGS-STOPP: $errorMsg | Aufruf: $requestUri", $logFile);
            
            // Wir setzen den Status 400 (Bad Request)
            http_response_code(400);
            header('Content-Type: application/json');
            
            echo json_encode([
                "error" => "Anfrage abgelehnt",
                "message" => $errorMsg
            ]);
            
            // Hier wird das gesamte PHP-Programm sofort beendet.
            exit; 
        }
    }
    
    // Wenn wir hier ankommen, war alles okay.
    internal_debug_log("Validierung erfolgreich bestanden für: $queryString", $logFile);
}