// ─── Documentos · Compartido ────────────────────────────────────────────
// Helpers y mapas de estado usados por las 6 listas de screens/documentos/
// (extraídos de screens-documentos.jsx, P10). Expone a window: _docExpPid,
// _docEntidadNombre, _docMoney, _docMoneyShort, _docDate, _docCount,
// _docExpCol, PRESUP_ESTADOS, OC_ESTADOS, REM_DOC_ESTADOS. Consume
// window.EXPEDIENTES/ENTIDADES (core/colecciones.js), formatMoney/
// formatMoneyShort/formatDate (dominio/formato.js).
//
// FIX (mapa-comprension.md §inv-dash, duplicación #2 — "resolver el nombre de
// una Entidad por id copiado literal 4 veces"): `_docEntidadNombre(id)` es
// NUEVO acá — antes cada pantalla (OrdenesCompraScreen, FacturasScreen)
// repetía `(window.ENTIDADES||[]).find(x=>x.id===id).razonSocial` en su
// columna Y en su exportConfig (4 copias en total). Mismo criterio que ya
// existía para expedientes (`_docExpPid`). Esta duplicación era además la
// CAUSA RAÍZ de que buscar por cliente no encontrara nada (ver fix de
// searchFilter en ordenes-compra.jsx/facturas.jsx): el nombre resuelto nunca
// entraba al string que compara `searchFilter`, solo se usaba para pintar la
// celda.

function _docExpPid(id) {
  const e = (window.EXPEDIENTES || []).find((x) => x.id === id);
  return e ? e.publicId : '—';
}

function _docEntidadNombre(id) {
  if (!id) return '';
  const e = (window.ENTIDADES || []).find((x) => x.id === id);
  return e ? e.razonSocial : '';
}

const _docMoney = (n) => (window.formatMoney ? window.formatMoney(n) : n);
const _docMoneyShort = (n) => (window.formatMoneyShort ? window.formatMoneyShort(n) : n);
const _docDate = (d) => (window.formatDate ? window.formatDate(d) : d);
const _docCount = (arr, fn) => arr.filter(fn).length;

function _docExpCol(id) {
  return <span className="font-mono text-[12px] font-bold" style={{ color: 'color-mix(in oklab, var(--foreground) 85%, transparent)' }}>{_docExpPid(id)}</span>;
}

// Tonos de estado por tipo de documento
const PRESUP_ESTADOS = {
  BORRADOR:  { label: 'Borrador',  tone: 'neutral' },
  APROBADO:  { label: 'Aprobado',  tone: 'pos' },
  RECHAZADO: { label: 'Rechazado', tone: 'neg' },
  VENCIDO:   { label: 'Vencido',   tone: 'warn' },
};
const OC_ESTADOS = {
  PENDIENTE:   { label: 'Pendiente',   tone: 'warn' },
  EN_TRANSITO: { label: 'En tránsito', tone: 'info' },
  RECIBIDA:    { label: 'Recibida',    tone: 'pos' },
  ANULADA:     { label: 'Anulada',     tone: 'neg' },
};
const REM_DOC_ESTADOS = {
  PENDIENTE:   { label: 'Pendiente',   tone: 'warn' },
  EN_TRANSITO: { label: 'En tránsito', tone: 'info' },
  ENTREGADO:   { label: 'Entregado',   tone: 'pos' },
  CONFIRMADO:  { label: 'Confirmado',  tone: 'pos' },
  ANULADO:     { label: 'Anulado',     tone: 'neg' },
};

Object.assign(window, {
  _docExpPid, _docEntidadNombre, _docMoney, _docMoneyShort, _docDate, _docCount, _docExpCol,
  PRESUP_ESTADOS, OC_ESTADOS, REM_DOC_ESTADOS,
});
