// marker-display-utils.js
// Aufgabe: Liefert die grundlegende Logik zur Farbbestimmung und zum Icon-HTML für einzelne Marker, 
// basierend auf deren last_cleaned-Datum und Patenschaftsstatus. 
// Es sind reine Hilfsfunktionen für die visuelle Darstellung.

/**
 * Bestimmt den Farbcode und den Text für einen Stolperstein basierend auf dem letzten Reinigungsdatum.
 * @param {string|null} lastCleanedTimestamp Das letzte Reinigungsdatum als ISO-String oder null.
 * @returns {{colorCode: string, text: string}} Ein Objekt mit Farbcode (green, yellow, orange, red, gray) und Status-Text.
 */

import { getPoiData } from "./poi-store.js";
import { getColorCodeAndText } from "./utilities.js";



/**
 * Berechnet die Farbe eines Clusters basierend auf den Daten der enthaltenen POIs.
 * Nutzt die GID des Markers, um die Daten aus dem zentralen POI-Store zu beziehen.
 * * @param {L.MarkerCluster} cluster - Das Leaflet Cluster-Objekt.
 * @returns {string} - Der Farbcode (z.B. "red", "green", "gray").
 */
export function calculateClusterColor(cluster) {
    const markersCount = cluster.getChildCount();

    // Fall 1: Cluster ist leer
    if (markersCount === 0) {
        return "gray";
    }

    let colorCount = {
        red: 0,
        orange: 0,
        yellow: 0,
        green: 0,
        gray: 0,
    };

    // 1. Zählung der Farben der Kind-Marker
    cluster.getAllChildMarkers().forEach((marker) => {
        // Extraktion der GID aus den Marker-Optionen (Leaflet-Ebene)
        const gid = marker.options ? marker.options.gid : null;
        
        // Datenabruf aus dem generischen Store via GID (Daten-Ebene)
        const poi = getPoiData(gid);

        if (poi) {
            // Nutzung der Poi-Instanz (oder generisches POI-Objekt)
            // Wir greifen auf last_cleaned zu, wie von deinen Utils erwartet
            const colorInfo = getColorCodeAndText(poi.last_cleaned);
            const color = colorInfo ? colorInfo.colorCode : "gray";
            
            if (colorCount.hasOwnProperty(color)) {
                colorCount[color]++;
            } else {
                colorCount["gray"]++;
            }
        } else {
            // Falls kein POI im Store gefunden wurde
            colorCount["gray"]++;
        }
    });

    // 2. Bestimmung der dominanten Farbe
    let dominantColor = "gray";
    let maxCount = 0;

    // Wir iterieren über die definierte Reihenfolge in colorCount
    for (const color in colorCount) {
        if (colorCount[color] > maxCount) {
            maxCount = colorCount[color];
            dominantColor = color;
        }
    }

    return dominantColor;
}