// ─── Finanzas: glue compartido ────────────────────────────────────────────
// Lo genuinamente común y chico entre las pantallas de Finanzas movidas/fusionadas
// en P8 (factura/recibo/nota/pago/factura-recibida): armado de campos de
// PartyBlock para un cliente/proveedor "suelto" (snapshot guardado en el propio
// documento, sin FK a resolver) y los helpers de un PAGO existente que reusan
// factura-recibida.jsx y pago.jsx. Colapsa 4 pares de helpers que P5 no había
// absorbido (ver mapa-comprension.md §finanzas, duplicaciones #4/#5/#6):
//   - _facClienteFields (screens-finanzas-nuevo.jsx) + _ndClienteFields
//     (screens-finanzas-detalle.jsx) -> buildClienteFieldsCompacto.
//   - _provFieldsNu (screens-finanzas-nuevo.jsx) + _proveedorFields
//     (screens-finanzas-docs.jsx) -> buildProveedorFields (con el guard
//     defensivo `prov = prov || {}` que solo tenía una de las dos copias).
//   - _nuHoy/_finHoy (ambas ya eran un wrapper de una sola línea sobre
//     MicosTodayISO()) mueren del todo: los call-sites usan MicosTodayISO()
//     directo, mismo criterio que P5 aplicó a _docHoy en expediente-docs.js.
//   - _nuAddDays/_finAddDays -> window.MicosAddDays (dominio/formato.js;
//     MicosTodayISO ya vivía ahí, faltaba el "sumar N días" compartido).
// Suma también `makeBlankPagoRecord` (antes vivía una sola vez en
// screens-finanzas-nuevo.jsx pero la usaban DOS pantallas — PagoFinScreen y
// FacturaRecibidaFinScreen — que P8 separó en pago.jsx/factura-recibida.jsx;
// queda acá para no duplicarla). Expone a window: buildClienteFieldsCompacto,
// buildProveedorFields, resolverProveedorPago, persistirPago, facturasDelPago,
// makeBlankPagoRecord. Consume window.PROVEEDORES/COMPRAS/PAGOS/MicosStore,
// MicosNextSeqId (dominio/secuencias.js).

// Cliente/proveedor SNAPSHOT guardado en el propio documento standalone (sin
// expediente detrás) — 4 campos compactos para el PartyBlock. Antes vivía
// duplicado carácter por carácter en factura/nota (_facClienteFields/
// _ndClienteFields); ahora también lo usa recibo.jsx en su fuente standalone.
function buildClienteFieldsCompacto(c) {
  c = c || {};
  const domicilio = [c.domicilio, c.localidad].filter(Boolean).join(', ') || null;
  return [
    { label: 'CUIT', value: c.cuit, mono: true },
    { label: 'Condición IVA', value: c.condicionIva },
    { label: 'Domicilio', value: domicilio },
    { label: 'Condición de venta', value: c.condicionVenta || 'Cuenta corriente' },
  ].filter((f) => f.value);
}

// Campos del proveedor para el PartyBlock (mismo orden que el Emisor de Micos).
// Antes duplicado entre _provFieldsNu (con el guard `prov = prov || {}`) y
// _proveedorFields (sin guard, "funcionaba" porque su único caller siempre
// resolvía un objeto) — se queda con el guard defensivo de las dos.
function buildProveedorFields(prov) {
  prov = prov || {};
  return [
    { label: 'CUIT', value: prov.cuit, mono: true },
    { label: 'Cond. IVA', value: prov.condicionIva },
    { label: 'Cond. venta', value: prov.condicionVenta },
    { label: 'Domicilio', value: prov.domicilio ? [prov.domicilio, prov.localidad].filter(Boolean).join(', ') : null },
    { label: 'Teléfono', value: prov.telefono, mono: true },
    { label: 'Email', value: prov.email },
  ].filter((f) => f.value);
}

// Resuelve el proveedor de un PAGO existente (por id de compra, id directo o
// nombre) — usado por factura-recibida.jsx (FacturaRecibidaScreen) y pago.jsx
// (PagoComprobanteScreen). Antes `_pagoProveedor`.
function resolverProveedorPago(pago) {
  const list = window.PROVEEDORES || [];
  let prov = null;
  if (pago.proveedorId) prov = list.find((p) => p.id === pago.proveedorId);
  if (!prov && pago.compraId && window.COMPRAS) {
    const c = window.COMPRAS.find((x) => x.id === pago.compraId);
    if (c && c.proveedorId) prov = list.find((p) => p.id === c.proveedorId);
  }
  if (!prov && pago.proveedor) prov = list.find((p) => p.razonSocial === pago.proveedor);
  return prov || { razonSocial: pago.proveedor || 'Proveedor', condicionIva: 'Responsable Inscripto' };
}

// Persiste un pago (mutado in-place) vía store.update — síncrono, no tira.
// Antes `_persistPago`.
//
// P8c (endurecimiento, molde 123b2bc): `imputaciones` es un campo que SOLO
// ImputacionCard en modo store persiste sola, en el momento del click
// (PagoComprobanteScreen, collection="pagos" — ver imputacion.jsx `persist()`). `pago`
// acá es la MISMA referencia que la card mutó (`rec.imputaciones = next`), así que
// reenviar el objeto COMPLETO como PATCH es el mismo patrón de doble-escritura que tuvo
// recibo.jsx antes del fix 123b2bc: un escritor de más reenviando un campo que ya
// escribió otro. Hoy `/api/pagos` ignora `imputaciones` por whitelist (PAGO_COLUMNS no
// la incluye — hallazgo 3 de 08b-imputacion-reporte.md, relevado y NO conectado en
// P8c/08c-endurecimiento-finanzas.md), así que no corrompe nada TODAVÍA — pero dejar el
// patrón vivo es la misma trampa latente que si ese conector se sumara mañana (mismo
// molde, `pago_id` en vez de `recibo_id` — "trivial de extender", dixit el hallazgo). Se
// omite acá, en el ÚNICO lugar que arma el patch de escritura de un pago existente, para
// blindar los DOS call-sites que comparten este helper: PagoComprobanteScreen (pago.jsx,
// la que sí usa ImputacionCard) y FacturaRecibidaScreen (factura-recibida.jsx, que no la
// usa pero comparte el mismo `pago` y el mismo helper — igual expuesta si el usuario
// pasó antes por la otra pantalla en la misma sesión).
function persistirPago(pago) {
  const store = window.MicosStore;
  if (!store) return;
  const patch = { ...pago };
  delete patch.imputaciones;
  store.update('pagos', pago.id, patch);
}

// Facturas recibidas de un pago (1:N) — con compat al modelo viejo (1 sola).
// Antes `_pagoFacturas`.
function facturasDelPago(pago) {
  if (Array.isArray(pago.facturasRecibidasDocs)) return pago.facturasRecibidasDocs;
  if (pago.facturaRecibidaDoc) return [pago.facturaRecibidaDoc];
  return [];
}

// PAGO en blanco para las 2 altas standalone que crean un pago nuevo
// (PagoFinScreen en pago.jsx, FacturaRecibidaFinScreen en
// factura-recibida.jsx) — antes vivía una sola vez pero servía a las dos.
function makeBlankPagoRecord() {
  return {
    id: 'pag-' + Date.now(),
    publicId: MicosNextSeqId(window.PAGOS || [], 'publicId', 'PAG-', 8),
    fecha: MicosTodayISO(),
    proveedor: '', proveedorId: null, compraId: null, compraNumero: null,
    total: 0, estado: 'PENDIENTE',
    facturaRecibida: null, comprobantePago: null, docExtra: null,
  };
}

Object.assign(window, {
  buildClienteFieldsCompacto, buildProveedorFields, resolverProveedorPago, persistirPago, facturasDelPago,
  makeBlankPagoRecord,
});
