<?php
// update_poi_geolocation.php - Aktualisiert die präzise Geolocation-Spalte (geom_geolocation).

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

// === Schritt 1: Debug-Logfile und Logging-Funktion zuerst definieren ===
$debugLogFile = __DIR__ . '/update_poi_geolocation_debug.log';
require_once __DIR__ . '/logging_functions.php';

// === Schritt 2: Konfiguration und andere Funktionen laden ===
$config = require_once __DIR__ . '/config.php';
require_once __DIR__ . '/validation_functions.php';

// WICHTIG: Verwenden Sie den Stil von update_poi_general, um die DB-Konfiguration zu laden.
$dbConfig = require __DIR__ . '/db-connection.php'; 

// Die Zieltabelle wird aus der Konfigurationsdatei abgeleitet
$targetTable = $config['tablePrefix']; 

// === Schritt 3: Validierungsprüfung ausführen ===
if (!isValidDatabaseRequest($debugLogFile)) {
    http_response_code(400);
    echo json_encode(["success" => false, "error" => "Ungültige URL-Parameter."]);
    exit;
}

internal_debug_log("--- " . basename(__FILE__) . " START ---", $debugLogFile);
header('Content-Type: application/json');

try {
    // Eingabedaten des Clients verarbeiten (JSON Body)
    $input = file_get_contents('php://input');
    $data = json_decode($input, true);

    // === Validierung der POST-Daten ===
    // ... (Validierungslogik bleibt unverändert) ...
    if (json_last_error() !== JSON_ERROR_NONE || !is_array($data)) {
        internal_debug_log("JSON Decode Error: " . json_last_error_msg() . " or data is not an array.", $debugLogFile);
        echo json_encode(['success' => false, 'error' => 'Ungültige JSON-Eingabe.']);
        exit;
    }
    $gid = $data['gid'] ?? null;
    $lat = $data['lat'] ?? null;
    $lng = $data['lng'] ?? null;

    if (!is_numeric($gid) || !is_numeric($lat) || !is_numeric($lng) || $gid <= 0) {
        internal_debug_log("Required data (gid, lat, lng) is missing or invalid.", $debugLogFile);
        echo json_encode(['success' => false, 'error' => 'Erforderliche Geo-Daten fehlen oder sind ungültig.']);
        exit;
    }

    // === Datenbankverbindung herstellen (mit pg_connect) ===
    $connString = "host={$dbConfig['host']} port={$dbConfig['port']} dbname={$dbConfig['dbname']} user={$dbConfig['user']} password={$dbConfig['password']}";
    $dbconn = pg_connect($connString);

    if (!$dbconn) {
        $dbError = pg_last_error();
        internal_debug_log("Database connection failed: " . $dbError, $debugLogFile);
        http_response_code(500);
        throw new Exception("Datenbankverbindung fehlgeschlagen: " . $dbError);
    }
    pg_set_client_encoding($dbconn, "UTF8");
    internal_debug_log("Database connection successful.", $debugLogFile);

    // === SQL: Update der geom_geolocation Spalte ===
    internal_debug_log("Starting GeoLocation update for GID: $gid with lat: $lat, lng: $lng.", $debugLogFile);

    // Die Parameter werden für pg_query_params vorbereitet
    $queryParams = [
        1 => $lng, // $1
        2 => $lat, // $2
        3 => $gid  // $3
    ];
    
    // Die DSN-Syntax erfordert keine Quotes um die Platzhalter ($1)
    $sql = "
        UPDATE public.{$targetTable}
        SET geom_geolocation = ST_SetSRID(ST_MakePoint($1, $2), 4326)
        WHERE gid = $3;
    ";
    
    $result = pg_query_params($dbconn, $sql, $queryParams);

    if (!$result) {
        $dbQueryError = pg_last_error($dbconn);
        internal_debug_log("Database query failed: " . $dbQueryError, $debugLogFile);
        throw new Exception("Datenbankabfrage fehlgeschlagen: " . $dbQueryError);
    }

    $rowCount = pg_affected_rows($result);
    pg_free_result($result);
    pg_close($dbconn);
    
    if ($rowCount > 0) {
        internal_debug_log("GeoLocation update SUCCESSFUL for GID $gid.", $debugLogFile);
        echo json_encode(["success" => true, "message" => "POI $gid erfolgreich mit präzisen Koordinaten aktualisiert."]);
    } else {
        internal_debug_log("GeoLocation update FAILED: GID $gid not found in {$targetTable}.", $debugLogFile);
        http_response_code(404);
        echo json_encode(["success" => false, "error" => "POI $gid nicht gefunden."]);
    }

} catch (Throwable $e) {
    // Wenn die Verbindung bereits geschlossen wurde, muss sie nicht erneut geschlossen werden.
    if (isset($dbconn) && $dbconn) {
        @pg_close($dbconn); 
    }
    $errorMessage = "Unhandled exception/error: " . $e->getMessage() . " in " . $e->getFile() . " on line " . $e->getLine();
    internal_debug_log($errorMessage, $debugLogFile);
    http_response_code(500);
    echo json_encode(['success' => false, 'error' => 'Ein unerwarteter Serverfehler ist aufgetreten.', 'details' => $errorMessage]);
}

internal_debug_log("--- " . basename(__FILE__) . " END ---", $debugLogFile);
?>