type PriceSource = { price?: number | null pricePercent?: number | null priceRange?: string | null } export function calculatePrice(source: PriceSource, base: number): number { if (source.price != null) return source.price if (source.pricePercent != null) return base * (source.pricePercent / 100) if (source.priceRange) { const parts = source.priceRange.split("–").map(Number) const max = Math.max(...parts) return Number.isNaN(max) ? 0 : max } return 0 } export function calculatePriceRange( baseSource: PriceSource | undefined, extras: PriceSource[] ): [number, number] { if (!baseSource) return [0, 0] const base = calculatePrice(baseSource, 0) let minExtra = 0 let maxExtra = 0 for (const extra of extras) { if (extra.price != null) { minExtra += extra.price maxExtra += extra.price } else if (extra.pricePercent != null) { const val = base * (extra.pricePercent / 100) minExtra += val maxExtra += val } else if (extra.priceRange) { const [minStr, maxStr] = extra.priceRange.split("–") const min = Number(minStr) const max = Number(maxStr) if (!Number.isNaN(min)) minExtra += min if (!Number.isNaN(max)) maxExtra += max } } return [base + minExtra, base + maxExtra] }