import { prisma, tenantDb } from '../src/config/database.js';

const I_UUID = '5c874749-748f-11f0-96b1-2b9310891836';
const E_UUID = '7163da3b-748f-11f0-9853-e97a8e1dedd9';

async function main() {
  const tenants = await prisma.tenant.findMany({ select: { id: true, rfc: true, databaseName: true } });

  for (const t of tenants) {
    let pool;
    try { pool = await tenantDb.getPool(t.id, t.databaseName); } catch { continue; }

    const { rows } = await pool.query(
      `SELECT uuid, tipo_comprobante, metodo_pago, cfdi_tipo_relacion, cfdis_relacionados,
              status, fecha_emision, total_mxn, iva_traslado_mxn,
              rfc_emisor, rfc_receptor, contribuyente_id, type
         FROM cfdis WHERE LOWER(uuid) IN (LOWER($1), LOWER($2))`,
      [I_UUID, E_UUID],
    );

    if (rows.length === 0) continue;
    console.log(`\n=== ${t.rfc} ===`);
    for (const r of rows) {
      const fe = new Date(r.fecha_emision).toISOString().slice(0, 10);
      console.log(`\n  UUID: ${r.uuid}`);
      console.log(`    tipo: ${r.tipo_comprobante}/${r.metodo_pago || '?'}  rel=${r.cfdi_tipo_relacion ?? 'null'}  status=${r.status}  type=${r.type}`);
      console.log(`    fecha: ${fe}  total=${r.total_mxn}  IVA=${r.iva_traslado_mxn}`);
      console.log(`    ${r.rfc_emisor} → ${r.rfc_receptor}  contrib_id=${r.contribuyente_id}`);
      console.log(`    cfdis_relacionados: ${r.cfdis_relacionados ?? 'NULL'}`);
    }

    // Si están ambos, verificar match de cfdis_relacionados
    if (rows.length === 2) {
      const i = rows.find((x: any) => x.uuid.toLowerCase() === I_UUID.toLowerCase());
      const e = rows.find((x: any) => x.uuid.toLowerCase() === E_UUID.toLowerCase());
      if (i && e) {
        const iRels = (i.cfdis_relacionados || '').split('|').map((u: string) => u.trim().toLowerCase()).filter(Boolean);
        const eRels = (e.cfdis_relacionados || '').split('|').map((u: string) => u.trim().toLowerCase()).filter(Boolean);
        const overlap = iRels.filter((u: string) => eRels.includes(u));
        console.log(`\n  I refs (${iRels.length}): ${iRels.join(', ').substring(0, 200)}`);
        console.log(`  E refs (${eRels.length}): ${eRels.join(', ').substring(0, 200)}`);
        console.log(`  Overlap (${overlap.length}): ${overlap.join(', ')}`);

        // Cruz: ¿la E referencia a la I directamente, o viceversa?
        if (eRels.includes(I_UUID.toLowerCase())) console.log(`  → E.cfdis_relacionados INCLUYE el UUID de I/07 PPD`);
        if (iRels.includes(E_UUID.toLowerCase())) console.log(`  → I.cfdis_relacionados INCLUYE el UUID de E`);
      }
    }
  }
  await prisma.$disconnect();
}
main().catch(async e => { console.error(e); await prisma.$disconnect().catch(() => {}); process.exit(1); });
