// Predefined distances from 4550 Asnæs to major postal codes (round trip in km) // This is a simplified approach for MVP - can be replaced with actual API later export const POSTAL_CODE_DISTANCES: Record = { // København (2000-2999) "2000": 200, // København K "2100": 206, // København Ø "2200": 208, // København N "2300": 200, // København S "2400": 210, // København NV "2450": 216, // København SV "2500": 194, // Valby "2600": 182, // Glostrup "2700": 188, // Brønshøj "2800": 162, // Lyngby "2900": 154, // Hellerup // Nordsjælland (3000-3999) "3000": 138, // Helsingør "3050": 132, // Humlebæk "3100": 128, // Hornbæk "3200": 110, // Helsinge "3300": 92, // Frederiksværk "3400": 112, // Hillerød "3460": 144, // Birkerød "3500": 116, // Værløse "3600": 90, // Frederikssund // Vestsjælland (4000-4999) "4000": 66, // Roskilde "4100": 56, // Ringsted "4200": 86, // Slagelse "4300": 32, // Holbæk "4400": 20, // Kalundborg "4500": 16, // Nykøbing Sjælland "4550": 0, // Asnæs (hjemmebase) "4600": 70, // Køge "4700": 132, // Næstved "4800": 216, // Nykøbing F "4900": 256, // Nakskov // Fyn (5000-5999) "5000": 290, // Odense C "5100": 330, // Odense C "5200": 300, // Odense V "5220": 296, // Odense SØ "5250": 284, // Odense SV "5260": 288, // Odense S "5270": 292, // Odense N "5500": 350, // Middelfart "5600": 360, // Faaborg "5700": 340, // Svendborg "5800": 380, // Nyborg "5900": 370, // Rudkøbing } // Default distances based on first two digits of postal code const DEFAULT_DISTANCES: Record = { // København centrum (1000-1999) "10": 200, "11": 200, "12": 200, "13": 200, "14": 200, "15": 200, "16": 200, "17": 200, "18": 200, "19": 200, // København (2000-2999) "20": 200, // København området "21": 206, "22": 208, "23": 200, "24": 210, "25": 194, "26": 182, "27": 188, "28": 162, "29": 154, "30": 138, // Nordsjælland "31": 128, "32": 110, "33": 92, "34": 112, "35": 116, "36": 90, "40": 66, // Vestsjælland "41": 56, "42": 86, "43": 32, "44": 20, "45": 16, "46": 70, "47": 132, "48": 216, // Lolland-Falster "49": 256, "50": 290, // Fyn "51": 330, "52": 296, "53": 310, "54": 320, "55": 350, "56": 360, "57": 340, "58": 380, "59": 370, } export function getDistance(postalCode: string): number { // First check if we have an exact match if (POSTAL_CODE_DISTANCES[postalCode]) { return POSTAL_CODE_DISTANCES[postalCode] } // Otherwise use default based on first two digits const prefix = postalCode.slice(0, 2) if (DEFAULT_DISTANCES[prefix]) { return DEFAULT_DISTANCES[prefix] } // If still no match, estimate based on region const firstDigit = postalCode[0] switch (firstDigit) { case "1": return 200 // København centrum average case "2": return 190 // København average case "3": return 110 // Nordsjælland average case "4": return 100 // Vestsjælland average case "5": return 320 // Fyn average default: return 200 // Default fallback } } export function isInCoverageArea(postalCode: string): boolean { const postalNumber = parseInt(postalCode) // Coverage area: 0-5999 (Sjælland, Lolland-Falster, Fyn) return postalNumber >= 0 && postalNumber <= 5999 } export function validateDanishPostalCode(postalCode: string): boolean { // Danish postal codes are 4 digits if (!/^\d{4}$/.test(postalCode)) { return false } // Valid ranges for Danish postal codes const code = parseInt(postalCode) return code >= 1000 && code <= 9999 }