import { NextResponse } from 'next/server' import { geocode, calcDelivery, inferTier } from '@/lib/delivery' import { readDeliveryRates } from '@/lib/delivery-rates' export async function POST(request: Request) { const { address, itemNames, rateOverride } = await request.json() as { address: string itemNames: string[] rateOverride?: { base: number; perMile: number } } if (!address?.trim()) { return NextResponse.json({ error: 'Address required' }, { status: 400 }) } const coords = await geocode(address) if (!coords) { return NextResponse.json({ error: 'Address not found — please try a more specific address.' }, { status: 422 }) } const tier = inferTier(itemNames ?? []) const rates = readDeliveryRates() // Apply per-item rate override if provided (overrides just base and perMile for the inferred tier) if (rateOverride) { if (typeof rateOverride.base !== 'number' || rateOverride.base < 0 || typeof rateOverride.perMile !== 'number' || rateOverride.perMile < 0) { return NextResponse.json({ error: 'Invalid rate override' }, { status: 400 }) } rates[tier] = { ...rates[tier], base: rateOverride.base, perMile: rateOverride.perMile, } } const quote = await calcDelivery(coords.lat, coords.lng, tier, rates) if (quote.miles > 40) { return NextResponse.json( { error: `This address is ${quote.miles.toFixed(1)} miles away — online scheduling is available within 40 miles. Please contact us directly to arrange delivery.`, tooFar: true, }, { status: 422 } ) } return NextResponse.json(quote) }