/** Detalle neto de cada CFDI del dashboard para Horux 360 mayo 2025. */
import { prisma, tenantDb } from '../src/config/database.js';
import { resolveContribuyenteContext } from '../src/utils/contribuyente-context.js';

async function main() {
  const tenant = await prisma.tenant.findFirst({ where: { rfc: 'DESPACHO_MO3NI6U8_B9VGG' }, select: { id: true, databaseName: true } });
  if (!tenant) return;
  const pool = await tenantDb.getPool(tenant.id, tenant.databaseName);
  const ctx = await resolveContribuyenteContext(pool, tenant.id, 'b3761db6-0b8d-4251-8078-4ddc31e9c75b');

  // Facturas I PUE (rendición con la misma lógica de g1Facturas)
  const { rows: fact } = await pool.query(
    `SELECT uuid, total_mxn,
            iva_traslado_mxn, ieps_traslado_mxn, impuestos_locales_trasladado_mxn,
            iva_retencion_mxn, isr_retencion_mxn, ieps_retencion_mxn, impuestos_locales_retenidos_mxn,
            cfdi_tipo_relacion,
            (COALESCE(total_mxn,0) - COALESCE(iva_traslado_mxn,0) - COALESCE(ieps_traslado_mxn,0) - COALESCE(impuestos_locales_trasladado_mxn,0)) AS neto_normal
       FROM cfdis
      WHERE ${ctx.esEmisor} AND tipo_comprobante='I' AND metodo_pago='PUE'
        AND status NOT IN ('Cancelado','0')
        AND fecha_emision >= '2025-05-01'::date AND fecha_emision < '2025-05-31'::date + interval '1 day'
        AND regimen_fiscal_emisor = '626'
      ORDER BY fecha_emision`,
  );
  console.log(`\nI PUE régimen 626:`);
  for (const r of fact) {
    console.log(`  ${r.uuid.substring(0,8)}  total=${Number(r.total_mxn).toFixed(2)}  iva_tras=${Number(r.iva_traslado_mxn).toFixed(2)}  iva_ret=${Number(r.iva_retencion_mxn).toFixed(2)}  isr_ret=${Number(r.isr_retencion_mxn).toFixed(2)}  neto=${Number(r.neto_normal).toFixed(2)}  rel=${r.cfdi_tipo_relacion || '-'}`);
  }
  const factNeto = fact.reduce((s, r) => s + Number(r.neto_normal), 0);
  console.log(`  Suma neto facturas: ${factNeto.toFixed(2)}`);

  // Pagos P
  const { rows: pagos } = await pool.query(
    `SELECT uuid, fecha_pago_p, monto_pago_mxn,
            iva_traslado_pago_mxn, ieps_traslado_pago_mxn,
            iva_retencion_pago_mxn, isr_retencion_pago_mxn, ieps_retencion_pago_mxn,
            (COALESCE(monto_pago_mxn,0) - COALESCE(iva_traslado_pago_mxn,0) - COALESCE(ieps_traslado_pago_mxn,0)) AS neto_normal
       FROM cfdis
      WHERE ${ctx.esEmisor} AND tipo_comprobante='P'
        AND status NOT IN ('Cancelado','0')
        AND fecha_pago_p >= '2025-05-01'::date AND fecha_pago_p < '2025-05-31'::date + interval '1 day'
        AND regimen_fiscal_emisor = '626'
      ORDER BY fecha_pago_p`,
  );
  console.log(`\nPagos P régimen 626:`);
  for (const r of pagos) {
    console.log(`  ${r.uuid.substring(0,8)}  monto_pago=${Number(r.monto_pago_mxn).toFixed(2)}  iva_tras_pago=${Number(r.iva_traslado_pago_mxn).toFixed(2)}  iva_ret_pago=${Number(r.iva_retencion_pago_mxn).toFixed(2)}  neto=${Number(r.neto_normal).toFixed(2)}`);
  }
  const pagosNeto = pagos.reduce((s, r) => s + Number(r.neto_normal), 0);
  console.log(`  Suma neto pagos: ${pagosNeto.toFixed(2)}`);

  console.log(`\nTOTAL facturas + pagos: ${(factNeto + pagosNeto).toFixed(2)}`);
  await prisma.$disconnect();
}
main().catch(async e => { console.error(e); await prisma.$disconnect().catch(() => {}); process.exit(1); });
