// bs-newaddress-co.js

import { showToast, checkDistance } from './sc-utilities.js';
import { updateSearchFieldWithAddress } from './app-shell-co.js';
import { LocationTrackingCoordinator } from './loc-tracking-co.js';; // ⬅️ NEU: Import für das Singleton

/**
 * Konfiguriert und öffnet das Bottom Sheet, um einen neuen Stolperstein an
 * einer geklickten Adresse zu erfassen.
 * * @param {object} clickEventData - Das Klick-Ereignis-Objekt (z.B. mit der Methode getLatLng()).
 * @param {object} bottomSheetUI - Die Instanz des Bottom Sheet UI.
 * @param {function(): boolean} getAdminModeStatus - Funktion zum Abfragen des Admin-Modus-Status.
 * @param {L.Map} map - Die Leaflet-Karteninstanz.
 * @param {Object} backendService - Die Instanz des Backend Service.
 */
export async function updateBsForNewAddress(
    clickEventData,
    bottomSheetUI,
    getAdminModeStatus,
    map,
    backendService
) {
    console.log("DEBUG: --- updateBsForNewAddress START ---");

    // 1. Singleton-Instanz abrufen
    const locTrackingCoordinator = LocationTrackingCoordinator.getInstance();;
    
    // --- Eingangsvalidierung ---
    if (!bottomSheetUI) {
        console.error("FEHLER: bottomSheetUI ist nicht verfügbar. Breche ab.");
        return;
    }
    if (!clickEventData || typeof clickEventData.getLatLng !== 'function') {
        console.error("FEHLER: Keine gültigen Koordinaten übergeben. Breche ab.");
        showToast("Fehler: Koordinaten nicht gefunden.");
        return;
    }

    const clickedLatLng = clickEventData.getLatLng();

    // Header und Content für das Bottom Sheet definieren
    const headerText = "Adresse ohne Stolpersteine";
    let contentHtml = `<p>Fügen Sie mit (+) einen Stolperstein hinzu.</p>`;
    
    const options = {
        showCaretaker: false,
        isCaretaker: false,
        showMainButton: false,
        showAddButton: true,
        showEditButton: false,
    };
    
    // 2. Standortprüfung und Admin-Modus-Check
    const userPosition = locTrackingCoordinator.getUserPosition(); // Abruf aus dem Singleton
    let userLat = null;
    let userLng = null;
    let canAddStone = true;

    if (userPosition) {
        userLat = userPosition[0];
        userLng = userPosition[1];
    }
    
    const distanceCheckFailed = !(userPosition && checkDistance(
        userLat,
        userLng,
        clickedLatLng.lat,
        clickedLatLng.lng,
        120));

    // Prüfen, ob Hinzufügen erlaubt ist
    if (distanceCheckFailed && !getAdminModeStatus()) {
        contentHtml = `<p>Adresse aufsuchen, um Stolperstein hinzuzufügen.</p>`;
        options.showAddButton = false;
        canAddStone = false;
    }


    // 3. Bottom Sheet konfigurieren
    bottomSheetUI.setBsHeaderText(headerText);
    bottomSheetUI.setContent(contentHtml);
    bottomSheetUI.setActions(options);

    // Setzen der Koordinaten im Bottom Sheet
    bottomSheetUI.setCoords({
        lat: clickedLatLng.lat,
        lng: clickedLatLng.lng
    });

    // 4. Adresse asynchron abrufen und UI aktualisieren
    try{
        const addressData = await backendService.getAddressFromLocation(clickedLatLng.lat, clickedLatLng.lng);
        const locationText = `${addressData.address.street || ''} ${addressData.address.houseNumber || ''}, ${ addressData.address.postalCode || ''} ${ addressData.address.district || ''}`;
        
        updateSearchFieldWithAddress(locationText);
        
        // Bottom Sheet im erweiterten Zustand öffnen
        bottomSheetUI.setSheetState(true);
        // Da clickEventData ein Event (Marker/Map) sein kann, übergeben wir die LatLng-Daten an open()
        bottomSheetUI.open(clickedLatLng);
    }
    catch (error) {
        console.error("Fehler beim Abrufen der Adresse:", error);
        showToast('Fehler beim Abrufen der Adresse. Bitte versuchen Sie es erneut.', 'Fehler');
        
        // Trotzdem öffnen, falls die Adresse nicht geladen werden konnte
        bottomSheetUI.setSheetState(true);
        bottomSheetUI.open(clickedLatLng);
    }

    console.log("DEBUG: --- updateBsForNewAddress END ---");
}