/*
|--------------------------------------------------------------------------
| Agência PSI — utils de tipo de evento (agenda)
|--------------------------------------------------------------------------
| Helpers puros pra classificar/normalizar tipo de evento. Extraídos de
| useMelissaAgenda.js (Fase A da decomposição agenda) pra reuso em
| Rail/Clínica + utility puro testável.
|--------------------------------------------------------------------------
*/

export const EVENTO_TIPO = Object.freeze({ SESSAO: 'sessao', BLOQUEIO: 'bloqueio' });
export const EVENTO_TIPOS_VALIDOS = new Set([EVENTO_TIPO.SESSAO, EVENTO_TIPO.BLOQUEIO]);

// Limite máximo de duração de sessão (regra de negócio Melissa). DB constraint
// session_duration_min_chk permite 10–240; convencionamos 120 (2h) aqui pra
// evitar slots gigantes acidentais. Futuro: ler de agenda_configuracoes se
// max_session_duration_min for adicionado.
export const MAX_SESSION_MINUTES = 120;

export function normalizeEventoTipo(t, fallback = EVENTO_TIPO.SESSAO) {
    const s = String(t || '').trim().toLowerCase();
    if (!s) return fallback;
    if (s.includes('sess')) return EVENTO_TIPO.SESSAO;
    if (s.includes('bloq') || s.includes('ocup')) return EVENTO_TIPO.BLOQUEIO;
    return EVENTO_TIPOS_VALIDOS.has(s) ? s : fallback;
}

export function deriveEventoTipoForNewEvent(payload) {
    const vis = String(payload?.visibility_scope || '').toLowerCase();
    const title = String(payload?.titulo || '').toLowerCase();
    if (vis === 'busy_only' || title.includes('ocup')) return EVENTO_TIPO.BLOQUEIO;
    return EVENTO_TIPO.SESSAO;
}

export function deriveTituloDefaultByTipo(tipo) {
    return normalizeEventoTipo(tipo, EVENTO_TIPO.SESSAO) === EVENTO_TIPO.BLOQUEIO ? 'Ocupado' : 'Sessão';
}
