// 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";
export function getColorCodeAndText(lastCleanedTimestamp) {
    const now = new Date();
    let colorCode = "gray"; // Standardfarbe für unbekannt oder nicht gereinigt
    let text = "Unbekannt";

    if (lastCleanedTimestamp) {
        const lastCleaned = new Date(lastCleanedTimestamp);
        const diffTime = Math.abs(now - lastCleaned);
        const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));

        if (diffDays <= 30) {
            colorCode = "green";
            text = "im letzten Monat";
        } else if (diffDays <= 90) {
            colorCode = "yellow";
            text = "vor 2 bis 3 Monaten";
        } else if (diffDays <= 180) {
            colorCode = "orange";
            text = "vor 4 bis 6 Monaten";
        } else {
            colorCode = "red";
            text = "vor über 6 Monaten";
        }
    }
    return { colorCode, text };
}

/**
 * Generiert den HTML-String für das Marker-Icon.
 * Setzt den CSS-Style für das Stolperstein-Icon – abhängig davon, ob es einen Paten gibt (Schild) oder nicht (Dreieck).
 * @param {string} caretakerStatus Der Status des Paten (nicht leer, wenn ein Pate vorhanden ist).
 * @param {string} colorCode Der Farbcode (z.B. "green", "red", "gray").
 * @returns {string} Der HTML-String für das Icon.
 */
export function getMarkerIcon(caretakerStatus, colorCode) {
    let iconClass = "";

    if (caretakerStatus && caretakerStatus.trim() !== "") {
        iconClass = "fas fa-shield-alt"; // Schild für Steine mit Paten
    } else {
        iconClass = "fas fa-exclamation-triangle"; // Dreieck für Steine ohne Paten
    }

    // return `<i class="${iconClass}" style="font-size: 24px; color:${colorCode}; background: none; border: none;"></i>`;
    return `<i class="${iconClass} marker-fa-icon" style="color:${colorCode}; background: none; border: none;"></i>`;
}



/**
 * 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 ScStone-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;
}