import { useMemo, useState } from 'react' import type { Unidad, DescuentosPropuestas } from '../types' import { APARTADO_DEFAULT, DESCUENTOS_DEFAULT, calcularNumMensualidades, calcularPropuestas, obtenerPrecioLista, type PropuestaResultado, } from '../lib/calculations' interface UseCotizacionResult { unidad: Unidad | null setUnidad: (u: Unidad | null) => void acabados: boolean setAcabados: (v: boolean) => void apartado: number setApartado: (v: number) => void descuentos: DescuentosPropuestas setDescuento: (clave: keyof DescuentosPropuestas, valor: number) => void precioLista: number numMeses: number propuestas: PropuestaResultado[] } /** Estado central de la cotización: unidad, acabados, apartado y descuentos */ export function useCotizacion(): UseCotizacionResult { const [unidad, setUnidad] = useState(null) const [acabados, setAcabados] = useState(false) const [apartado, setApartado] = useState(APARTADO_DEFAULT) const [descuentos, setDescuentos] = useState({ ...DESCUENTOS_DEFAULT }) const setDescuento = (clave: keyof DescuentosPropuestas, valor: number) => { setDescuentos((prev) => ({ ...prev, [clave]: valor })) } const numMeses = useMemo( () => (unidad ? calcularNumMensualidades(unidad.fechaEntrega) : 0), [unidad], ) const precioLista = useMemo( () => (unidad ? obtenerPrecioLista(unidad, acabados) : 0), [unidad, acabados], ) const propuestas = useMemo(() => { if (!unidad) return [] return calcularPropuestas({ unidad, acabados, apartado, descuentos }) }, [unidad, acabados, apartado, descuentos]) return { unidad, setUnidad, acabados, setAcabados, apartado, setApartado, descuentos, setDescuento, precioLista, numMeses, propuestas, } }