// poi-store.js
// Der poi-store dient als zentrales Datenverzeichnis, das schwere POI-Objekte hocheffizient über ihre gid verwaltet 
// und so die Logik von der visuellen Darstellung trennt. Er stellt sicher, dass Daten nur einmal im Speicher existieren 
// und alle UI-Komponenten (Karte, BottomSheet) immer auf dieselbe, aktuelle Informationsquelle zugreifen.
import { Poi } from './poi.js'; // Sicherstellen, dass die Klasse importiert ist
const store = new Map();

/**
 * Registriert POI-Objekte im zentralen Speicher.
 * @param {Object[]} poiArray - Array von POI-Instanzen (z.B. Poi).
 */
export function updatePoiStore(poiArray) {
    poiArray.forEach(poi => {
        if (poi && poi.gid) {
            // Wir speichern die Referenz unter der GID
            store.set(Number(poi.gid), poi);
        }
    });
}

export function getPoiData(gid) {
    return gid ? store.get(Number(gid)): null; 
}

/**
 * Aktualisiert oder fügt einen einzelnen POI im Store hinzu.
 * @param {Object} poiData - Das aktualisierte POI-Objekt.
 */


export function updateSinglePoiInStore(poiData) {
    if (poiData && poiData.gid) {
        const gid = Number(poiData.gid);
        const existing = store.get(gid);
        
        // WURZEL-FIX: Wenn bereits eine echte Poi-Instanz existiert...
        if (existing &&  existing instanceof Poi) {
            
            // ...befüllen wir die existierende Instanz Feld für Feld.
            // Die .set()-Methode von Poi kümmert sich um Typen und das Mapping!
            Object.keys(poiData).forEach((key) => {
                if (key !== "gid") {
                    existing.set(key, poiData[key]);
                }
            });
            
            // Die modifizierte, intakte Instanz wieder in den Store schreiben
            store.set(gid, existing);
            
        } else {
// ERGÄNZT: Nur ein erklärender Kommentar für die Zukunft. 
            // Falls das alte Objekt noch ein ungültiges 'house_no' hatte, wird das 
            // vom Konstruktor der neuen Poi-Instanz hier direkt repariert.
            const cleanData = existing ? { ...existing, ...poiData } : poiData;
            store.set(gid, new Poi(cleanData));
        }
        
        // console.log(`Store: POI ${gid} typsicher aktualisiert.`);
    }
}
/**
 * Gibt den gesamten Store zurück, um Iterationen (z.B. für Umkreissuche) zu ermöglichen.
 * @returns {Map} Der zentrale POI-Speicher.
 */
export function getPoiStore() {
    return store;
}