/*
|--------------------------------------------------------------------------
| Agência PSI
|--------------------------------------------------------------------------
| Criado e desenvolvido por Leonardo Nohama
|
| Tecnologia aplicada à escuta.
| Estrutura para o cuidado.
|
| Arquivo: src/composables/useAuth.js
| Data: 2026
| Local: São Carlos/SP — Brasil
|--------------------------------------------------------------------------
| © 2026 — Todos os direitos reservados
|--------------------------------------------------------------------------
*/

/**
 * ---------------------------------------------------------
 * useAuth()
 * ---------------------------------------------------------
 *
 * Stack do projeto:
 * - Vue 3 (Composition API)
 * - PrimeVue (UI)
 * - Supabase (Auth + Database)
 *
 * Responsabilidade:
 * Camada global de AUTENTICAÇÃO baseada no Supabase.
 *
 * O que este composable faz:
 * - Obtém a sessão atual do Supabase (auth.getSession)
 * - Mantém o estado reativo do usuário autenticado
 * - Escuta mudanças de autenticação (login, logout, refresh de token)
 * - Expõe apenas a identidade do usuário (user)
 *
 * O que ele NÃO faz:
 * - Não controla permissões
 * - Não valida roles
 * - Não decide acesso a telas ou botões
 * - Não aplica regras de plano (Free/Pro)
 *
 * Conceito arquitetural:
 * Este arquivo trata apenas de IDENTIDADE (Auth).
 *
 * Auth  → "Quem é o usuário autenticado?"
 * AuthZ → "O que esse usuário pode acessar ou executar?"
 *
 * A AUTORIZAÇÃO deve ser tratada em outra camada,
 * como por exemplo:
 * - useAuthz()
 * - tenantStore (membership.role)
 * - entitlementsStore (features do plano)
 *
 * Observação importante:
 * O role do usuário NÃO vem do Supabase Auth.
 * Ele é definido na tabela de membership (multi-tenant).
 *
 * Portanto:
 * Nunca utilizar apenas `user` para controle de acesso.
 *
 * Esse composable é apenas a base de identidade do sistema.
 */

import { ref, onMounted } from 'vue';
import { supabase } from '@/lib/supabase/client';

const user = ref(null);

export function useAuth() {
    const init = async () => {
        const { data } = await supabase.auth.getSession();
        user.value = data.session?.user || null;
    };

    supabase.auth.onAuthStateChange((_, session) => {
        user.value = session?.user || null;
    });

    onMounted(init);

    return { user };
}
