/*
|--------------------------------------------------------------------------
| Agência PSI
|--------------------------------------------------------------------------
| Arquivo: src/features/agenda/services/agendaSelects.js
|
| Fonte única do SELECT de agenda_eventos. Antes estava duplicado em 3
| lugares (useAgendaEvents, agendaRepository, agendaClinicRepository) com
| inconsistências sutis (FKs explícitas em uns, não em outros).
|--------------------------------------------------------------------------
*/

/**
 * Select canônico de agenda_eventos com joins do paciente e do commitment.
 *
 * FKs explícitas (obrigatórias para evitar ambiguidade quando agenda_eventos
 * tem múltiplas colunas apontando para a mesma tabela):
 *   - agenda_eventos_patient_id_fkey
 *   - agenda_eventos_determined_commitment_fk
 */
export const AGENDA_EVENT_SELECT = `
  id, owner_id, patient_id, tipo, status,
  titulo, titulo_custom, observacoes, inicio_em, fim_em,
  terapeuta_id, visibility_scope,
  determined_commitment_id, link_online, extra_fields, modalidade,
  recurrence_id, recurrence_date,
  mirror_of_event_id, price,
  insurance_plan_id, insurance_guide_number, insurance_value, insurance_plan_service_id,
  patients!agenda_eventos_patient_id_fkey (
    id, nome_completo, avatar_url, status
  ),
  determined_commitments!agenda_eventos_determined_commitment_fk (
    id, bg_color, text_color
  )
`.trim();

/**
 * Achata o aninhamento de patients dentro da row.
 * O resto do app usa tanto `paciente_nome` (flat) quanto `patients?.nome_completo`
 * (aninhado). Mantemos ambos após o flatten.
 */
export function flattenAgendaRow(r) {
    if (!r) return r;
    const patient = r.patients || null;
    const out = { ...r };
    out.paciente_nome = patient?.nome_completo || r.paciente_nome || '';
    out.paciente_avatar = patient?.avatar_url || r.paciente_avatar || '';
    out.paciente_status = patient?.status || r.paciente_status || '';
    return out;
}
