// user-location.js
import { map } from './map-manager.js'; // Importiere die map Instanz
import { showToast } from './sc-utilities.js'; 

export let userMarker = null;
export let watchId = null;
export let userPosition = null;
export let trackingPaused = false;
let isFirstUpdate = true; // Flag, um sicherzustellen, dass die Karte nur beim ersten Tracking-Start zentriert wird


export function setLocation(lat, lon) {
    userPosition = [lat, lon];
    if (userMarker) {
        userMarker.setLatLng([lat, lon]);
    } else {
        userMarker = L.marker(userPosition, {
            icon: L.divIcon({
                className: "leaflet-marker-icon",
                html: '<div class="user-location-emoji">↖️</div>',
                iconSize: [20, 20],
            }),
        }).addTo(map);
    }
}

export function startTracking() {
    return new Promise((resolve, reject) => {
        if (navigator.geolocation) {
            watchId = navigator.geolocation.watchPosition(
                (position) => {
                    const lat = position.coords.latitude;
                    const lon = position.coords.longitude;
                    setLocation(lat, lon); // Nutze die exportierte setLocation Funktion

                    document.getElementById("location-icon").classList.add("pulsieren");
                    trackingPaused = false;

                    if (isFirstUpdate) {
                        map.setView([lat, lon], 17);
                        isFirstUpdate = false;
                    }
                    window.userPosition = userPosition; // Aktualisiere den globalen userPosition
                    resolve(userPosition);
                },
                (error) => {
                    console.log("Fehler beim Abrufen des Standorts:", error);
                    reject(error);
                },
                {
                    enableHighAccuracy: true,
                    timeout: 10000,
                    maximumAge: 1000
                }
            );
        } else {
            console.log("Geolocation wird von diesem Browser nicht unterstützt.");
            reject(new Error("Geolocation nicht unterstützt"));
        }
    });
}

export function stopTracking() {
    if (watchId) {
        navigator.geolocation.clearWatch(watchId);
        watchId = null;
        userPosition = null;
        document.getElementById("location-icon").classList.remove("pulsieren");
        isFirstUpdate = true;
    }
    if (userMarker) {
        map.removeLayer(userMarker);
        userMarker = null;
    }
}

export function pauseTracking() {
    if (watchId) {
        navigator.geolocation.clearWatch(watchId);
        trackingPaused = true;
        if (userMarker) {
            map.removeLayer(userMarker);
            userMarker = null;
        }
    }
}

export function resumeTracking() {
    trackingPaused = false;
    if (!userMarker && userPosition) { // Nur wenn Marker nicht existiert und Position bekannt
        userMarker = L.marker(userPosition, {
            icon: L.divIcon({
                className: "leaflet-marker-icon",
                html: '<div class="user-location-emoji">↖️</div>',
            }),
        }).addTo(map);
    }
    startTracking(); // Starte das Tracking erneut, um die Position zu aktualisieren
}