// bs-newaddress-co.js

import { showToast, checkDistance } from './sc-utilities.js';
import { updateSearchFieldWithAddress } from './app-shell-co.js';
// ⬇️ SINGLETON IMPORTS
import { LocationTrackingCoordinator } from './loc-tracking-co.js';
import { getAdminMode } from './admin-mode-co.js';
import { getMap } from './map-markers-co.js'; // BEREINIGT: Singleton für Map-Zugriff

/**
 * Konfiguriert und öffnet das Bottom Sheet, um einen neuen Stolperstein an
 * einer geklickten Adresse zu erfassen.
 * BEREINIGT: map-Parameter entfernt.
 * @param {object} clickEventData - Das Klick-Ereignis-Objekt (mit .latlng oder ._latlng).
 * @param {object} bottomSheetUI - Die Instanz des Bottom Sheet UI.
 * @param {Object} backendService - Die Instanz des Backend Service.
 */
export async function updateBsForNewAddress(
    clickEventData,
    bottomSheetUI,
    backendService
) {
    console.log("DEBUG: --- updateBsForNewAddress START ---");

    // 1. Singleton-Instanzen abrufen
    const map = getMap(); // BEREINIGT: Instanz intern holen
    const locTrackingCoordinator = LocationTrackingCoordinator.getInstance();
    const isAdmin = getAdminMode.getStatus();

    // KOORDINATEN KONSISTENT HOLEN
    const clickedLatLng = clickEventData.latlng || clickEventData._latlng;

    // --- Eingangsvalidierung ---
    if (!bottomSheetUI) {
        console.error("FEHLER: bottomSheetUI ist nicht verfügbar. Breche ab.");
        return;
    }

    if (!clickedLatLng || typeof clickedLatLng.lat !== 'number' || typeof clickedLatLng.lng !== 'number') {
        console.error("FEHLER: Keine gültigen Koordinaten übergeben. Breche ab.");
        showToast("Fehler: Koordinaten nicht gefunden.");
        return;
    }

    // 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();
    let userLat = null;
    let userLng = null;

    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 && !isAdmin) {
        contentHtml = `<p>Adresse aufsuchen, um Stolperstein hinzuzufügen.</p>`;
        options.showAddButton = 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);
        // Hier wird die Adresse im Bottom Sheet UI-State gesetzt
        bottomSheetUI.updateAddress(addressData.address.street, addressData.address.houseNumber , addressData.address.district);
        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);
        bottomSheetUI.open(clickedLatLng);
    }
    catch (error) {
        console.error("Fehler beim Abrufen der Adresse:", error);
        showToast('Fehler beim Abrufen der Adresse.', 'Fehler');

        bottomSheetUI.setSheetState(true);
        bottomSheetUI.open(clickedLatLng);
    }

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