/*
|--------------------------------------------------------------------------
| Agência PSI
|--------------------------------------------------------------------------
| Criado e desenvolvido por Leonardo Nohama
|
| Tecnologia aplicada à escuta.
| Estrutura para o cuidado.
|
| Arquivo: src/lib/supabase/tenantClient.js
| Data: 2026
| Local: São Carlos/SP — Brasil
|--------------------------------------------------------------------------
| © 2026 — Todos os direitos reservados
|--------------------------------------------------------------------------
|
| Acesso schema-per-tenant: tenantDb() devolve o client Supabase apontando
| pro schema físico do tenant ativo (tenant_<slug>). Tabelas GLOBAIS
| (tenants, tenant_members, profiles, subscriptions, planos, créditos...)
| continuam via supabase.from(...) direto.
|
| A segurança NÃO depende da escolha do schema no cliente: cada schema tem
| policies com o tenant_id embutido (is_tenant_member). Apontar pro schema
| de outro tenant devolve zero linhas.
*/
import { supabase } from '@/lib/supabase/client';
import { useTenantStore } from '@/stores/tenantStore';

// espelho de public.tenant_schema_name(slug)
export function tenantSchemaName(slug) {
    if (typeof slug !== 'string') return null;
    if (!/^[a-z][a-z0-9_]{1,47}$/.test(slug)) return null;
    return `tenant_${slug}`;
}

/**
 * Client do schema do tenant ativo. Lança se não houver tenant ativo —
 * chamadas a tabelas tenant sem contexto de tenant são sempre um bug.
 * @param {string} [tenantSlug] slug explícito (ex.: fluxos admin); default: tenant ativo
 */
export function tenantDb(tenantSlug) {
    const slug = tenantSlug ?? useTenantStore().activeTenantSlug;
    const schema = tenantSchemaName(slug);
    if (!schema) {
        throw new Error('[tenantDb] tenant ativo indisponível (slug: ' + String(slug) + ')');
    }
    return supabase.schema(schema);
}
