/**
 * @fileoverview insert-poi-co.js
 * Koordiniert die Logik für das Hinzufügen neuer Stolpersteine.
 * Architektur: Event-basiert (poi:requestInsert).
 */

import { showToast } from './utilities.js';
import { getPoiData } from './poi-store.js';
import { ApplicationCoordinator } from './app-gen-co.js';
import { Poi } from './poi.js';

/**
 * Initialisiert die UI-Anbindung für das Hinzufügen eines Stolpersteins.
 */

/**
 * Behandelt die Datenvorbereitung nach dem Formular-Submit.
 * Feuert das Event 'poi:requestInsert', das in app-poi-co verarbeitet wird.
 */
/*
export async function handleSaveStone(stoneData, bottomSheetUIInstance) {
    console.log("Speichervorgang initiiert für:", stoneData);

    try {
        const coords = bottomSheetUIInstance.getCoords();
        const address = bottomSheetUIInstance.currentAddress;

        if (!coords?.lat || !address?.street) {
            showToast("Fehler: Positionsdaten unvollständig.");
            return;
        }

        // Daten für das Event vorbereiten (Mapping auf DB-Struktur)
        const payload = {
            first_name: stoneData.firstName,
            last_name: stoneData.lastName,
            year_of_birth: stoneData.birthYear,
            stone_position: stoneData.position,
            street: address.street,
            houseNr: address.houseNr,
            localdistrict: address.localDistrict || '',
            city: 'Berlin',
            lat: coords.lat,
            lng: coords.lng,
            // Optionale Initialisierung für Konsistenz:
            last_cleaned: "",
            caretaker: ""
        };

        // Event feuern zur Verarbeitung in app-poi-co
        ApplicationCoordinator.appEvents.dispatchEvent(new CustomEvent('poi:requestInsert', {
            detail: { 
                stoneData: payload,
                sourceUI: bottomSheetUIInstance 
            }, open
        }));
        const a = 1;

    } catch (error) {
        console.error("Fehler beim Vorbereiten des Inserts:", error);
    }
}
*/
// In insert-poi-co.js
export async function handleSaveStone(formData, bottomSheetUI, backendService) {
    const coords = bottomSheetUI.getCoords();
    const address = bottomSheetUI.currentAddress;

    // Transformation der Attribute auf die Namen, die Poi/allowedFields erwartet
    const stoneData = {
        first_name: formData.firstName,
        last_name: formData.lastName,
        year_of_birth: formData.birthYear,
        stone_position: formData.position,
        street: address.street,
        houseNr: address.houseNr,
        localdistrict: address.localDistrict,
        lat: coords.lat,
        lng: coords.lng,
        city: 'Berlin'
    };

    try {
        // Wir erstellen das Model mit den bereits korrekten Feldnamen
        const newStone = new Poi(stoneData);

        // Direkter Backend-Aufruf
        const result = await backendService.insertStone(newStone);

        if (result?.success) {
            showToast("Gespeichert.");
            InsertPoiUI.getInstance().closePopup();
            bottomSheetUI.close();
            // Trigger für Karten-Refresh falls nötig
        } else {
            showToast("Fehler: " + (result?.message || "Serverfehler"));
        }
    } catch (error) {
        console.error("Fehler beim Speichern:", error);
    }
}
/**
 * Erstellt den Click-Handler für den "Edit" Button.
 * Nutzt GID und Store für maximale Datenintegrität.
 */
export function createEditClickHandler(bottomSheetUIInstance, marker, addButtonUIInstance) {
    return function () {
        const gid = marker.options?.gid;
        const stoneData = gid ? getPoiData(gid) : marker.stone;

        if (!stoneData) {
            console.error("Fehler: Keine Daten für den Edit-Vorgang gefunden.");
            return;
        }

        if (!addButtonUIInstance) {
            console.error("addButtonUIInstance nicht verfügbar.");
            return;
        }

        bottomSheetUIInstance.close();
        addButtonUIInstance.editStone(stoneData);
    };
}