/**
 * Reparte un descuento entre cuotas en proporción a su saldo.
 *
 * Redondear cada parte por separado no cierra: 160.000 entre seis cuotas
 * iguales da 26.667 × 6 = 160.002. Acá se redondea el acumulado y cada
 * cuota se lleva la diferencia, así la suma da exacto el descuento pedido y
 * ninguna parte se aleja más de una unidad de su proporción.
 */
export function prorratearDescuento(descuento: number, saldos: number[]): number[] {
  const total = saldos.reduce((s, v) => s + v, 0);
  if (!(descuento > 0) || !(total > 0)) return saldos.map(() => 0);

  let acumulado = 0;
  let asignado = 0;
  return saldos.map((saldo) => {
    acumulado += saldo;
    const hastaAca = Math.round((descuento * acumulado) / total);
    const parte = hastaAca - asignado;
    asignado = hastaAca;
    return parte;
  });
}
