import { runQuery, getDocument, patchDocument, deleteDocument } from '/home/ultimo/claude-workspace/sino-ia/mcp-clinica/lib/firestore-dev.mjs';
import { writeFileSync } from 'fs';
const CID = '2wzhNjEcRwVYfw2hI38saLXxW8H3';

// pares apurados: manter (ficha antiga, com historico) <- absorve (ficha do pre-agendamento)
const PARES = [
  { quem: 'Camylle', manter: 'r0X9JKIBc8sC8ASjQntu', absorver: '5dWPrs6n3kNChgX9MZkE' },
  { quem: 'Alessa',  manter: 'FrP93fV3J0lkrXv97Jwt', absorver: 'EZn6pAkokZIXi5SsdW6j' },
  { quem: 'Regina',  manter: 'Z23TJ3MVogM0wQhQedm0', absorver: 'NNiPdjX91lFezQVGTKEp' },
  { quem: 'Thays',   manter: 'gWOzt5jyPJHQKxC0MCmM', absorver: 'Uq6Za47H4RFtRmXN0oiY' },
];

const appts = await runQuery('appointments', [{ field: 'clinicId', op: 'EQUAL', value: CID }]);
const backup = [];
let erros = 0;

for (const par of PARES) {
  const [boa, ruim] = await Promise.all([getDocument(`patients/${par.manter}`), getDocument(`patients/${par.absorver}`)]);
  backup.push({ par, boa, ruim, agendamentos: appts.filter((a) => a.patientId === par.absorver) });

  // GUARDAS: nao apagar ficha com CPF, nem se a canonica nao existir
  if (!boa) { console.log(`  ${par.quem}: FICHA A MANTER NAO EXISTE — pulando`); erros++; continue; }
  if (!ruim) { console.log(`  ${par.quem}: ja unificada (a ficha a absorver nao existe mais)`); continue; }
  if (ruim.cpf || ruim.birthDate) { console.log(`  ${par.quem}: a ficha a absorver TEM dados (CPF/nasc) — NAO apago, precisa de olho humano`); erros++; continue; }

  const mover = appts.filter((a) => a.patientId === par.absorver);
  for (const a of mover) {
    await patchDocument(`appointments/${a._id}`, { patientId: par.manter, isNewPatient: false });
    const dep = await getDocument(`appointments/${a._id}`);
    if (dep.patientId !== par.manter) { console.log(`  ${par.quem}: FALHOU ao repontar ${a._id}`); erros++; continue; }
  }
  // so apaga se NENHUM agendamento aponta mais para ela
  const sobrou = (await runQuery('appointments', [{ field: 'clinicId', op: 'EQUAL', value: CID }]))
    .filter((a) => a.patientId === par.absorver);
  if (sobrou.length) { console.log(`  ${par.quem}: ainda ha ${sobrou.length} agendamento(s) apontando — NAO apago`); erros++; continue; }
  await deleteDocument(`patients/${par.absorver}`);
  const sumiu = await getDocument(`patients/${par.absorver}`).catch(() => null);
  console.log(`  ${par.quem}: ${mover.length} agendamento(s) repontado(s) para "${boa.name}" | ficha vazia ${sumiu ? 'AINDA EXISTE' : 'removida'}`);
}
writeFileSync('/home/ultimo/backups/unificacao-pacientes-12-08.json', JSON.stringify(backup, null, 1));
console.log(`\n  backup do estado anterior: /home/ultimo/backups/unificacao-pacientes-12-08.json`);
console.log(erros ? `  ${erros} caso(s) exigem atencao` : '  todos unificados sem erro');
