/**
 * Composable de lecture des modules actifs (source : `/api/modules`).
 *
 * State singleton au niveau module : `useSidebar` suit la meme convention.
 * Chargement idempotent via le flag `loaded`, reset automatique au logout
 * via `onAuthSessionCleared` (cf. CLAUDE.md : « composables avec state
 * singleton doivent etre reinitialises au logout »).
 */
import { ref } from 'vue'
import { onAuthSessionCleared } from '~/shared/stores/auth'

const activeModuleIds = ref<string[]>([])
const loaded = ref(false)

function resetModulesState(): void {
    activeModuleIds.value = []
    loaded.value = false
}

onAuthSessionCleared(resetModulesState)

export function useModules() {
    async function loadModules() {
        try {
            const api = useApi()
            const data = await api.get<{ modules: string[] }>(
                '/modules',
                {},
                { toast: false },
            )
            activeModuleIds.value = data.modules ?? []
            loaded.value = true
        } catch {
            // Swallow volontaire aligne sur useSidebar : un echec reseau ne
            // doit pas bloquer le rendu, l'app affichera juste sans la
            // granularite module (selector masque par defaut).
            activeModuleIds.value = []
            loaded.value = true
        }
    }

    function isModuleActive(id: string): boolean {
        return activeModuleIds.value.includes(id)
    }

    function resetModules() {
        resetModulesState()
    }

    return {
        activeModuleIds,
        loaded,
        loadModules,
        isModuleActive,
        resetModules,
    }
}
