<?php
// update_poi_general.php - Stellt eine wiederverwendbare Funktion für die POI-Aktualisierung bereit.

// KEINE globalen Variablen oder direkte Einbindungen hier!
// Alle Abhängigkeiten (logging_functions, config, etc.)
// müssen im aufrufenden Skript (update_poi_clean.php) geladen werden.

function update_poi_general($dataToUpdate, $debugLogFile) {
    internal_debug_log("Starting general update function.", $debugLogFile);

    // --- Dynamische Tabellenauswahl basierend auf der Konfiguration ---
    // Die Konfiguration (tablePrefix) wird vom aufrufenden Skript bereitgestellt.
    $tableName = $dataToUpdate['tablePrefix'];
    internal_debug_log("Using table: public.{$tableName}", $debugLogFile);

    // --- Konfiguration und Datenbankverbindung ---
    // Konfiguration direkt aus der globalen Konfigurationsdatei laden
    $dbConfig = require __DIR__ . '/db-connection.php';
    $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);
        return [
            'success' => false, 
            'message' => 'Datenbankverbindung fehlgeschlagen', 
            'details' => $dbError
        ];
    }
    pg_set_client_encoding($dbconn, "UTF8");
    internal_debug_log("Database connection successful.", $debugLogFile);

    // --- Dynamische SQL-Abfrage vorbereiten und ausführen ---
    $allowedFields = [
        'last_cleaned', 
        'cleaned_by', 
        'updated_by', 
        'updated_at',
        'first_name', 
        'last_name', 
        'year_of_birth', 
        'stone_position'
    ];
    $updateFields = [];
    $queryParams = [];
    $paramIndex = 1;

    foreach ($allowedFields as $field) {
        if (array_key_exists($field, $dataToUpdate)) {
            $updateFields[] = pg_escape_identifier($dbconn, $field) . ' = $' . $paramIndex;
            $queryParams[] = $dataToUpdate[$field];
            $paramIndex++;
        }
    }

    $gid = filter_var($dataToUpdate['gid'], FILTER_VALIDATE_INT);
    if ($gid === false) {
        internal_debug_log("Validation of GID failed.", $debugLogFile);
        return [
            'success' => false, 
            'message' => 'Validierung fehlgeschlagen', 
            'details' => 'Ungültige GID.'
        ];
    }

    if (empty($updateFields)) {
        internal_debug_log("No valid fields for update were provided.", $debugLogFile);
        return [
            'success' => false, 
            'message' => 'Keine gültigen Felder zur Aktualisierung übergeben.'
        ];
    }

    $queryParams[] = $gid;

    $setClause = implode(', ', $updateFields);
    $query = "
        UPDATE public.{$tableName}
        SET {$setClause}
        WHERE gid = $" . $paramIndex . "
        RETURNING *;
    ";
    internal_debug_log("SQL Query: " . $query, $debugLogFile);

    $result = pg_query_params($dbconn, $query, $queryParams);

    if (!$result) {
        $dbQueryError = pg_last_error($dbconn);
        internal_debug_log("Database query failed: " . $dbQueryError, $debugLogFile);
        return [
            'success' => false, 
            'message' => 'Datenbankabfrage fehlgeschlagen', 
            'details' => $dbQueryError
        ];
    }

    $updatedRow = pg_fetch_assoc($result);
    pg_free_result($result);
    pg_close($dbconn);
    internal_debug_log("Database connection closed.", $debugLogFile);

    if ($updatedRow) {
        internal_debug_log("Update successful. GID: " . $updatedRow['gid'], $debugLogFile);
        return [
            'success' => true,
            'message' => 'Update erfolgreich',
            'last_cleaned' => $updatedRow['last_cleaned'] ?? null
        ];
    } else {
        internal_debug_log("No row found or updated for GID: " . $gid, $debugLogFile);
        return [
            'success' => false, 
            'message' => 'Kein Datensatz gefunden oder aktualisiert für GID: ' . $gid
        ];
    }
}
?>