/**
 * @fileoverview sc-settings-co.js
 * Verwaltet die Geschäftslogik und den Zustand für das Einstellungs-Panel.
 */
import { LocationTrackingCoordinator } from './loc-tracking-co.js';
import { mylog } from './utilities.js';
import { ScIntroButton } from './intro-button.js';


export class SettingsCoordinator {
    /**
     * @private {SettingsUI} #settingsUI
     * @private {LocationTrackingCoordinator} #locTrackingCoordinator
     * @private {Object} #authSettings - Instanz der Auth-Komponente
     */
    #settingsUI;
    #locTrackingCoordinator;
    #authSettings;

    /**
     * @param {SettingsUI} settingsUIInstance
     */
    constructor(settingsUIInstance) {
        this.#settingsUI = settingsUIInstance;
        this.#locTrackingCoordinator = LocationTrackingCoordinator.getInstance();

        this.#setupEventListeners();

        // NEU: Sofort prüfen, ob wir eingeloggt sind (Silent Login via Token)
        this.#authSettings = this.#settingsUI.getAuthSettings();
        if (this.#authSettings && typeof this.#authSettings.ensureValidSession === 'function') {
            //       this.#authSettings.ensureValidSession();
        }

        console.log("SettingsCoordinator initialisiert.");
    }

    // --- Öffentliche Methoden ---

    updatePoiInfo() {
        const data = ScIntroButton.getPoiGalleryData();
        if (this.#settingsUI && typeof this.#settingsUI.setPoiInfoData === 'function') {
            this.#settingsUI.setPoiInfoData(data);
            mylog("SettingsCoordinator: POI-Galeriedaten an UI übertragen.");
        }
    }

    toggleSettings() {
        if (this.#settingsUI.isOpen()) {
            this.#settingsUI.close();
            mylog("SettingsCoordinator: Einstellungen geschlossen.");
        } else {
            this.updatePoiInfo();
            // Zweitens: Statistiken (Balken) erefreshen
            const stats = this.#settingsUI.getStatsComponent();
            if (stats) {
                stats.refresh();
            }

            this.#settingsUI.open();
            mylog("SettingsCoordinator: Einstellungen geöffnet.");
        }
    }

    initializeSettingsState() {
        mylog("SettingsCoordinator: initializeSettingsState aufgerufen.");

        if (this.#locTrackingCoordinator) {
            const isLocationActive = this.#locTrackingCoordinator.isTrackingActive();
            this.#settingsUI.updateLocationToggle(isLocationActive);
        }
    }

    // --- Interne Event-Listener ---

    #setupEventListeners() {
        // 1. UI Interaktionen
        /*
        this.#settingsUI.onCloseButtonClick(() => {
            mylog("SettingsCoordinator: Close-Event erhalten.");
        });*/
this.#settingsUI.onCloseButtonClick(() => {
        mylog("SettingsCoordinator: Close-Event erhalten. Revalidiere Karte...");
        
        // Wir warten 350ms, bis die CSS-Transition (0.3s) der UI 
        // sicher abgeschlossen ist und das Overlay auf 'visibility: hidden' steht.
        setTimeout(() => {
            // Trigger ein globales Resize-Event. 
            // Leaflet lauscht standardmäßig darauf und führt invalidateSize() aus.
            window.dispatchEvent(new Event('resize'));
            
            // Falls du direkten Zugriff auf die Map-Instanz hast, 
            // wäre map.invalidateSize() noch sicherer.
            mylog("SettingsCoordinator: Karte durch Resize-Event aufgefrischt.");
        }, 350);
    });
        this.#settingsUI.onHelpButtonClick(() => {
            mylog("SettingsCoordinator: Help-Button Klick erhalten.");
        });

        // 2. Location Updates
        if (this.#locTrackingCoordinator) {
            this.#locTrackingCoordinator.onTrackingStateChange((isActive) => {
                this.#settingsUI.updateLocationToggle(isActive);
            });
        }

        // 3. Globaler Auth-Wächter (ERSETZT die Retry-Logik)
        // Wir hören auf das CustomEvent, das unsere neuen Module feuern
        window.addEventListener('sc-auth-changed', async (e) => {
            mylog("SettingsCoordinator: Globales Auth-Event erkannt.");
            const detail = e.detail || {};

            // ... deine Log-Ausgaben ...

            // 1. Die Statistik-Komponente greifen
            const stats = this.#settingsUI.getStatsComponent();

            // 2. Unabhängig davon, ob das Panel offen oder zu ist: 
            // Wir triggern den Refresh, damit die Daten aktuell sind, 
            // sobald der User das nächste Mal hinschaut.
            if (stats && typeof stats.refresh === 'function') {
                // Ein minimaler Delay (100ms) stellt sicher, dass die 
                // PHP-Session auf dem Server den User-Wechsel verarbeitet hat.
                await new Promise(r => setTimeout(r, 100));

                stats.refresh();
                mylog("SettingsCoordinator: Stats-Refresh nach Auth-Wechsel ausgeführt.");
            }

            // Optional: Falls du das Panel bei Logout doch schließen willst:
            // if (detail.status === 'guest') this.#settingsUI.close();
        });
        // 4. Einmaliger Abruf der Auth-Instanz für direkte Aufrufe
        this.#authSettings = this.#settingsUI.getAuthSettings();
    }
}

