/**
 * Cuánto entra a caja por cada medio de pago en un cobro.
 *
 * El capital va por línea, cada una con su medio. La mora y el interés manual
 * viven en la cabecera (`mora_total`) y no cuelgan de ninguna línea: entran
 * por el medio de la primera línea, que en el cobro por distribución es el
 * mismo para todas. Sin esto la caja esperaba solo el capital y el efectivo
 * del interés quedaba como sobrante en el arqueo.
 */
export interface LineaCaja {
  medio_pago_id?: string | null;
  monto_pagado: number | string | { toString(): string } | null;
}

export function montosCajaPorMedio(lineas: LineaCaja[], moraTotal: number): Map<string, number> {
  const porMedio = new Map<string, number>();
  for (const l of lineas) {
    if (!l.medio_pago_id) continue;
    porMedio.set(l.medio_pago_id, (porMedio.get(l.medio_pago_id) ?? 0) + Number(l.monto_pagado ?? 0));
  }
  const mora = Number(moraTotal ?? 0);
  const medioMora = lineas.find((l) => l.medio_pago_id)?.medio_pago_id;
  if (mora > 0 && medioMora) porMedio.set(medioMora, (porMedio.get(medioMora) ?? 0) + mora);
  return porMedio;
}
