/**
 * Ajuste de una cuota en guaraníes por índice (IPC del BCP), decidido el 10/10/2026:
 *
 *   cuota a cobrar = cuota original × índice vigente al cobro ÷ índice del mes de la firma
 *
 * - "Vigente al cobro" es el último índice publicado (cargado) cuyo período no es
 *   posterior al mes del cobro. El IPC de un mes se publica a principios del
 *   siguiente, así que normalmente es el del mes anterior.
 * - La cuota nunca baja del monto original: si hubo deflación se cobra el original.
 * - Se redondea a guaraníes enteros.
 */
export function ajustarPorIndice(montoOriginal: number, indiceFirma: number, indiceVigente: number): number {
  const original = Number(montoOriginal) || 0;
  const base = Number(indiceFirma) || 0;
  const actual = Number(indiceVigente) || 0;
  if (base <= 0 || actual <= 0) {
    throw new Error('Faltan los índices para ajustar la cuota (el de la firma y el vigente al cobro)');
  }
  return Math.round(Math.max(original, (original * actual) / base));
}

/** Día 1 del mes de una fecha, en UTC: es la clave de período de inm_indices. */
export function periodoDe(fecha: Date | string): Date {
  const d = typeof fecha === 'string' ? new Date(fecha) : fecha;
  return new Date(Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), 1));
}
