/*
|--------------------------------------------------------------------------
| Agência PSI
|--------------------------------------------------------------------------
| Arquivo: src/features/tenantship/services/_tenantGuards.js
|
| Guards compartilhados entre repositories do feature tenantship.
| Cópia canônica do pattern extraído de features/agenda/services/_tenantGuards.js
| (ver blueprints/repository-blueprint.md seção 3).
|--------------------------------------------------------------------------
*/
import { supabase } from '@/lib/supabase/client';

export function assertTenantId(tenantId) {
    if (!tenantId || tenantId === 'null' || tenantId === 'undefined') {
        throw new Error('Tenant ativo inválido. Selecione a clínica/tenant antes de operar.');
    }
}

export async function getUid() {
    const { data, error } = await supabase.auth.getUser();
    if (error) throw error;
    const uid = data?.user?.id;
    if (!uid) throw new Error('Usuário não autenticado.');
    return uid;
}

export function assertEmail(email) {
    if (!email || typeof email !== 'string') {
        throw new Error('E-mail inválido.');
    }
    const trimmed = email.trim().toLowerCase();
    if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(trimmed)) {
        throw new Error('E-mail em formato inválido.');
    }
    return trimmed;
}

export function assertRole(role) {
    if (!['therapist', 'secretary'].includes(role)) {
        throw new Error("Role inválida. Aceitos: 'therapist' ou 'secretary'.");
    }
    return role;
}
