/*
|--------------------------------------------------------------------------
| Agência PSI
|--------------------------------------------------------------------------
| Criado e desenvolvido por Leonardo Nohama
|
| Tecnologia aplicada à escuta.
| Estrutura para o cuidado.
|
| Arquivo: src/utils/googleCalendarLink.js
| Data: 2026
| Local: São Carlos/SP — Brasil
|--------------------------------------------------------------------------
| © 2026 — Todos os direitos reservados
|--------------------------------------------------------------------------
*/
// Gera uma URL de "Adicionar ao Google Calendar" via link template.
// Não requer OAuth — abre o Google Calendar do usuário com o evento pré-preenchido.

/**
 * Formata uma data + horário no padrão exigido pelo Google Calendar: YYYYMMDDTHHmmss
 *
 * @param {Date|string} date   - Objeto Date ou string ISO (YYYY-MM-DD)
 * @param {string}      hhmm   - Horário no formato "HH:MM"
 * @returns {string}           - Ex: "20260318T100000"
 */
export function formatGCalDate(date, hhmm = '00:00') {
    const d = date instanceof Date ? date : new Date(date);
    const yyyy = d.getFullYear();
    const mm = String(d.getMonth() + 1).padStart(2, '0');
    const dd = String(d.getDate()).padStart(2, '0');
    const [hh, min] = String(hhmm).split(':');
    return `${yyyy}${mm}${dd}T${String(hh || '00').padStart(2, '0')}${String(min || '00').padStart(2, '0')}00`;
}

/**
 * Soma minutos a um horário "HH:MM" e retorna o novo "HH:MM".
 *
 * @param {string} hhmm       - Horário base "HH:MM"
 * @param {number} minutes    - Minutos a somar
 * @returns {string}          - Ex: "11:00"
 */
export function addMinutesToHHMM(hhmm, minutes) {
    const [h, m] = String(hhmm || '00:00')
        .split(':')
        .map(Number);
    const total = h * 60 + m + (minutes || 0);
    const endH = Math.floor(total / 60) % 24;
    const endM = total % 60;
    return `${String(endH).padStart(2, '0')}:${String(endM).padStart(2, '0')}`;
}

/**
 * Gera a URL do Google Calendar com o evento pré-preenchido.
 *
 * @param {object} event
 * @param {string}  event.title       - Título do evento
 * @param {string}  event.description - Descrição (aceita texto simples)
 * @param {string}  event.location    - Local ou "Online"
 * @param {string}  event.start       - Data/hora início no formato YYYYMMDDTHHmmss
 * @param {string}  event.end         - Data/hora fim no formato YYYYMMDDTHHmmss
 * @returns {string} URL válida para abrir no Google Calendar
 */
export function generateGoogleCalendarLink({ title, description, location, start, end }) {
    const params = new URLSearchParams({
        action: 'TEMPLATE',
        text: title || '',
        dates: `${start}/${end}`,
        details: description || '',
        location: location || '',
        ctz: 'America/Sao_Paulo'
    });

    return `https://www.google.com/calendar/render?${params.toString()}`;
}
