/**
 * @fileoverview insert-poi-co.js
 * Koordiniert die Logik für das Hinzufügen und Speichern neuer Stolpersteine.
 */

import { ScStone } from './ScStone.js';
import { showToast } from './sc-utilities.js';
import { BackendService } from './backend-poi.js';
// NEU: Store-Funktion importieren
import { updatePoiStore } from './poi-store.js';

/**
 * Initialisiert die Logik zum Hinzufügen eines Stolpersteins.
 */
export function initAddStoneLogic(bottomSheetUIInstance, addButtonUIInstance, refreshMapMarkersCallback, backendService) {
    bottomSheetUIInstance.onAddStoneClick((coordsFromBottomSheet) => {
        addButtonUIInstance.showPopup({}, coordsFromBottomSheet);
    });
}

/**
 * Behandelt das Speichern eines neuen Stolpersteins.
 */
/**
 * Behandelt das Speichern eines neuen Stolpersteins.
 */
export async function handleSaveStone(stoneData, bottomSheetUIInstance, refreshMapMarkersCallback, backendServiceInstance) {
    console.log("Starte Speichervorgang für Stolperstein:", stoneData);

    try {
        // 1. Koordinaten vom BottomSheetUI holen
        const coords = bottomSheetUIInstance.getCoords();
        if (!coords || typeof coords.lat !== 'number' || typeof coords.lng !== 'number') {
            showToast("Fehler: Keine gültige Position verfügbar.");
            return;
        }

        const { lat, lng } = coords;

        // 2. Adresse DIREKT aus dem BottomSheet-Speicher holen
        // Wir verlassen uns auf die in handleMarkerSelection gesetzte Adresse.
        const { street, houseNr, localDistrict } = bottomSheetUIInstance.currentAddress;

        if (!street || !houseNr || !localDistrict) {
            showToast("Fehler: Straße , Hausnummer oder Stadtteil fehlt am Standort.");
            return;
        }

        // 3. SCStone Instanz erstellen
        const newStoneData = {
            first_name: stoneData.firstName,
            last_name: stoneData.lastName,
            year_of_birth: stoneData.birthYear,
            stone_position: stoneData.position,
            street: street,
            house_no: houseNr,
            localdistrict: localDistrict || '',
            city: 'Berlin', // Standardwert oder aus globalem State
            lat: lat,
            lng: lng,
            last_cleaned: "",
            caretaker: "",
        };

        const scStoneInstance = new ScStone(newStoneData, backendServiceInstance);

        // 4. Im Backend speichern
        const result = await backendServiceInstance.insertStone(scStoneInstance);

        if (result.success) {
            console.log("Stolperstein erfolgreich eingefügt, neue GID:", result.gid);

            // A) GID der Instanz zuweisen
            scStoneInstance.gid = Number(result.gid);

            // B) In den POI-Store schreiben
            updatePoiStore([scStoneInstance]);

            showToast("Erfolg", "Stolperstein erfolgreich gespeichert!", 'success');

            // UI aufräumen (hier wird durch close() auch die Adresse in BsUI gelöscht)
            bottomSheetUIInstance.close();

            // C) Karte aktualisieren /  Den Callback aufrufen. 
            // Dieser triggert im ApplicationCoordinator 'addNewMarkerFromStore'.
            // DORT wird der Marker erzeugt UND der Klick-Event gebunden.
            if (typeof refreshMapMarkersCallback === 'function') {
                refreshMapMarkersCallback({
                    newGid: scStoneInstance.gid
                });
                /*
                // 3. Den Click-Event binden (Minimal-Code)

                newMarker.on('click', function (event) {
                    L.DomEvent.stopPropagation(event);

                    // Du nutzt einfach deine vorhandene Funktion!
                    handleMarkerSelection(
                        this.options.gid, // Hier muss die neue GID drinstehen
                        { bottomSheetUI, backendService, mapState, insertPoiUI, updatePoiUI, map },
                        this.__parent || null
                    );
                });*/

            }
        } else {
            showToast("Fehler", `Konnte Stolperstein nicht speichern: ${result.error}`, 'error');
        }

    } catch (error) {
        console.error("Fehler im Speichervorgang:", error);
        showToast("Ein unerwarteter Fehler ist aufgetreten.");
    }
}

/**
 * Erstellt den Click-Handler für den "Edit" Button.
 */
export function createEditClickHandler(bottomSheetUIInstance, marker, addButtonUIInstance) {
    return function () {
        const stoneData = marker.stone || marker.options.data;

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

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