/*
|--------------------------------------------------------------------------
| Agência PSI — utils de tempo/data (agenda)
|--------------------------------------------------------------------------
| Helpers puros pra manipulação de tempo na agenda. Extraídos de
| useMelissaAgenda.js (Fase A) pra reuso em Rail/Clínica.
|--------------------------------------------------------------------------
*/

const UUID_RX = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;

export function isUuid(v) {
    return UUID_RX.test(String(v || ''));
}

/**
 * Soma minutos a um time "HH:MM" e retorna "HH:MM:SS".
 * Tolerante a input vazio (default 09:00).
 */
export function addMinutesToTime(timeStr, minutes) {
    const [h, m] = String(timeStr || '09:00').split(':').map(Number);
    const total = h * 60 + m + Number(minutes || 0);
    const hh = Math.floor(total / 60);
    const mm = total % 60;
    return `${String(hh).padStart(2, '0')}:${String(mm).padStart(2, '0')}:00`;
}

/**
 * ISO timestamp → hora decimal (ex: "2026-05-21T14:30:00Z" → 14.5).
 * Usa hora local (não UTC) — propósito de exibição no calendário.
 */
export function isoToDecimalHour(iso) {
    if (!iso) return 0;
    const d = new Date(iso);
    return d.getHours() + d.getMinutes() / 60;
}

/**
 * Date object → "YYYY-MM-DD" (formato ISO date sem hora).
 */
export function dateToISO(d) {
    const y = d.getFullYear();
    const m = String(d.getMonth() + 1).padStart(2, '0');
    const dd = String(d.getDate()).padStart(2, '0');
    return `${y}-${m}-${dd}`;
}
