// sc-settings-co.js
import { LocationTrackingCoordinator } from './loc-tracking-co.js';;
import { SettingsUI } from './sc-settings-ui.js';
import { mylog } from './sc-utilities.js';

/**
 * SettingsCoordinator.js
 * Verwaltet die Geschäftslogik und den Zustand für das Einstellungs-Panel.
 * Stellt die Verbindung zwischen den SettingsUI-Komponenten und den Kerndiensten (z.B. LocationTrackingCoordinator) her.
 */
export class SettingsCoordinator {
    /**
     * @private {SettingsUI} #settingsUI - Die Instanz der SettingsUI-Klasse.
     * @private {function(): boolean} #getAdminModeStatus - Getter-Funktion für den Admin-Modus-Status.
     * @private {LocationTrackingCoordinator} #locTrackingCoordinator - Das Singleton der LocationTrackingCoordinator-Klasse.
     */
    #settingsUI;
    #getAdminModeStatus;
    #locTrackingCoordinator;

    /**
     * @param {SettingsUI} settingsUIInstance - Die Instanz der SettingsUI-Klasse.
     * @param {function(): boolean} getAdminModeStatus - Getter-Funktion für den Admin-Modus-Status.
     */
    constructor(settingsUIInstance, getAdminModeStatus) {
        this.#settingsUI = settingsUIInstance;
        this.#getAdminModeStatus = getAdminModeStatus;
        
        // Ruft das Singleton ab, da es bereits im ApplicationCoordinator instanziiert wurde.
        this.#locTrackingCoordinator = LocationTrackingCoordinator.getInstance();; 

        this.#setupEventListeners();
        console.log("SettingsCoordinator initialisiert.");
    }

    // --- Öffentliche Methoden (vom ApplicationCoordinator aufgerufen) ---

    /**
     * 🚨 NEU: Implementiert die fehlende Methode, um das Einstellungs-Panel umzuschalten.
     * Wird vom ApplicationCoordinator aufgerufen, wenn auf das Settings-Icon geklickt wird.
     */
    toggleSettings() {
        if (this.#settingsUI.isOpen()) {
            this.#settingsUI.close();
            mylog("SettingsCoordinator: Einstellungen geschlossen.");
        } else {
            this.#settingsUI.open();
            mylog("SettingsCoordinator: Einstellungen geöffnet.");
        }
    }

    /**
     * Setzt den initialen Zustand aller Einstellungselemente,
     * basierend auf den aktuellen Status der Kerndienste.
     * Wird vom ApplicationCoordinator nach der Standortfreigabe aufgerufen.
     */
    initializeSettingsState() {
        mylog("SettingsCoordinator: initializeSettingsState aufgerufen.");
        
        // 1. Standort-Toggle aktualisieren
        if (this.#locTrackingCoordinator) {
            const isLocationActive = this.#locTrackingCoordinator.isTrackingActive();
            // Ruft die korrigierte Methode in SettingsUI auf (die nun ein gültiges Location-Objekt hat)
            this.#settingsUI.updateLocationToggle(isLocationActive); 
            mylog(`SettingsCoordinator: Location Toggle auf Zustand: ${isLocationActive}`);
        } else {
            console.warn("SettingsCoordinator: LocationTrackingCoordinator Manager nicht gefunden. Location-Einstellungen können nicht initialisiert werden.");
        }

        // 2. Admin-Modus-Status
        // (Weitere Status-Logik hier, falls vorhanden)
    }


    // --- Interne Event-Listener ---
    
    #setupEventListeners() {
        // 1. Externe Events von der UI abonnieren (Schließen des gesamten Panels)
        this.#settingsUI.onCloseButtonClick(() => {
            mylog("SettingsCoordinator: Interner Close-Event von SettingsUI erhalten.");
            // Hier könnte zusätzliche Logik vor dem Schließen platziert werden (z.B. Speichern)
        });

        // 2. Events vom Hilfe-Button abonnieren
        this.#settingsUI.onHelpButtonClick(() => {
            mylog("SettingsCoordinator: Help-Button Klick von SettingsUI erhalten.");
            // Der Coordinator könnte hier zusätzliche Logik (z.B. Tracking) hinzufügen.
        });
        
        // 3. Standort-Tracking-Status von LocationTrackingCoordinator abonnieren, 
        // um die UI zu aktualisieren, falls sich der Status außerhalb der SettingsUI ändert.
        if (this.#locTrackingCoordinator) {
            this.#locTrackingCoordinator.onTrackingStateChange((isActive) => {
                mylog(`SettingsCoordinator: Erhaltener Tracking-Status von LocationTrackingCoordinator: ${isActive}`);
                this.#settingsUI.updateLocationToggle(isActive); 
            });
        }
        
        console.log("SettingsCoordinator: Generische UI-Event-Listener hinzugefügt.");
    }
}