import type { BudgetInputs, PricingConfig, TipoReforma } from './types';

export interface Cantidades {
  m2Suelo: number;
  m2Pared: number;
  mlMobiliario: number;
  perimetro: number;
  alturaTecho: number;
}

const M2_MEDIANA: Record<TipoReforma, number> = {
  cocina: 10,
  bano: 5,
  salon: 20,
  comedor: 16,
  integral: 70,
  otro: 12,
};

// Metros lineales de mobiliario por metro de perímetro. Solo cocina/baño.
const FACTOR_MOBILIARIO: Partial<Record<TipoReforma, number>> = {
  cocina: 0.5,
  bano: 0.3,
};

export function deriveCantidades(inputs: BudgetInputs, config: PricingConfig): Cantidades {
  const m2Suelo =
    inputs.m2Suelo != null && inputs.m2Suelo > 0
      ? inputs.m2Suelo
      : M2_MEDIANA[inputs.tipoReforma];
  const alturaTecho =
    inputs.alturaTecho != null && inputs.alturaTecho > 0
      ? inputs.alturaTecho
      : config.alturaTechoDefault;
  const perimetro = 4 * Math.sqrt(m2Suelo);
  const m2Pared = perimetro * alturaTecho;
  const mlMobiliario = perimetro * (FACTOR_MOBILIARIO[inputs.tipoReforma] ?? 0);
  return { m2Suelo, m2Pared, mlMobiliario, perimetro, alturaTecho };
}
