import type { BudgetResult, PartidaResult } from './types';

export const AVISO_EDITADO = 'Presupuesto ajustado manualmente por el reformista.';

// Aplica la edición manual de conceptos del reformista sobre un presupuesto ya calculado.
// Conserva el factor de zona del cálculo original; el reformista ha validado las cifras,
// así que la confianza pasa a alta y el rango colapsa al total.
export function applyConceptoEdits(prev: BudgetResult, partidas: PartidaResult[]): BudgetResult {
  const clean: PartidaResult[] = partidas
    .map((p) => ({
      key: p.key,
      label: p.label.trim(),
      importe: Math.max(0, Math.round(p.importe)),
    }))
    .filter((p) => p.label.length > 0);

  const subtotal = clean.reduce((s, p) => s + p.importe, 0);
  const total = Math.round(subtotal * prev.factorZona);
  const avisos = prev.avisos.includes(AVISO_EDITADO) ? prev.avisos : [...prev.avisos, AVISO_EDITADO];

  return {
    ...prev,
    partidas: clean,
    subtotal,
    total,
    rango: { min: total, max: total },
    confianza: 'alta',
    avisos,
  };
}
