/*
|--------------------------------------------------------------------------
| Agência PSI
|--------------------------------------------------------------------------
| Criado e desenvolvido por Leonardo Nohama
|
| Tecnologia aplicada à escuta.
| Estrutura para o cuidado.
|
| Arquivo: src/composables/usePlatformPermissions.js
| Data: 2026
| Local: São Carlos/SP — Brasil
|--------------------------------------------------------------------------
| © 2026 — Todos os direitos reservados
|--------------------------------------------------------------------------
*/
// Distinto do RBAC de tenant (useRoleGuard).
//
// O campo `platform_roles text[]` na tabela `profiles` do Supabase
// armazena papéis globais da plataforma. Ex.: ['editor'].
//
// Quem pode atribuir: somente o saas_admin.
// Quem pode ter: qualquer usuário autenticado (exceto paciente).
//
// PAPÉIS DE PLATAFORMA DISPONÍVEIS:
//   'editor' — pode criar e gerenciar cursos/módulos da plataforma de microlearning.
//

import { ref, computed } from 'vue';
import { supabase } from '@/lib/supabase/client';
import { sessionUser } from '@/app/session';

// cache em módulo (evita queries repetidas por navegação)
let _cachedUid = null;
let _cachedRoles = null;

export function usePlatformPermissions() {
    const platformRoles = ref(_cachedRoles ?? []);
    const loading = ref(false);
    const error = ref(null);

    async function load(force = false) {
        const uid = sessionUser.value?.id;
        if (!uid) {
            platformRoles.value = [];
            return;
        }

        // cache por uid (invalida se usuário mudou)
        if (!force && _cachedUid === uid && _cachedRoles !== null) {
            platformRoles.value = _cachedRoles;
            return;
        }

        loading.value = true;
        error.value = null;

        try {
            const { data, err } = await supabase.from('profiles').select('platform_roles').eq('id', uid).single();

            const roles = !err && Array.isArray(data?.platform_roles) ? data.platform_roles : [];
            _cachedUid = uid;
            _cachedRoles = roles;
            platformRoles.value = roles;
        } catch (e) {
            console.warn('[usePlatformPermissions] load falhou:', e);
            error.value = e;
            platformRoles.value = [];
        } finally {
            loading.value = false;
        }
    }

    function invalidate() {
        _cachedUid = null;
        _cachedRoles = null;
        platformRoles.value = [];
    }

    const isEditor = computed(() => platformRoles.value.includes('editor'));

    return {
        platformRoles,
        loading,
        error,
        isEditor,
        load,
        invalidate
    };
}
