import type { Language } from "@/lib/i18n"; import type { Province } from "@/types/province"; const provinceByTerytPrefix: Record = { "02": "dolnośląskie", "04": "kujawsko-pomorskie", "06": "lubelskie", "08": "lubuskie", "10": "łódzkie", "12": "małopolskie", "14": "mazowieckie", "16": "opolskie", "18": "podkarpackie", "20": "podlaskie", "22": "pomorskie", "24": "śląskie", "26": "świętokrzyskie", "28": "warmińsko-mazurskie", "30": "wielkopolskie", "32": "zachodniopomorskie", }; const provinceByStationId: Record = { "12100": "zachodniopomorskie", "12105": "zachodniopomorskie", "12115": "pomorskie", "12120": "pomorskie", "12125": "pomorskie", "12135": "pomorskie", "12155": "pomorskie", "12160": "warmińsko-mazurskie", "12185": "warmińsko-mazurskie", "12195": "podlaskie", "12200": "zachodniopomorskie", "12205": "zachodniopomorskie", "12210": "zachodniopomorskie", "12215": "zachodniopomorskie", "12230": "wielkopolskie", "12235": "pomorskie", "12250": "kujawsko-pomorskie", "12270": "mazowieckie", "12272": "warmińsko-mazurskie", "12280": "warmińsko-mazurskie", "12285": "mazowieckie", "12295": "podlaskie", "12300": "lubuskie", "12310": "lubuskie", "12330": "wielkopolskie", "12345": "wielkopolskie", "12360": "mazowieckie", "12375": "mazowieckie", "12385": "mazowieckie", "12399": "lubelskie", "12400": "lubuskie", "12415": "dolnośląskie", "12418": "wielkopolskie", "12424": "dolnośląskie", "12435": "wielkopolskie", "12455": "łódzkie", "12465": "łódzkie", "12469": "łódzkie", "12488": "mazowieckie", "12495": "lubelskie", "12497": "lubelskie", "12500": "dolnośląskie", "12510": "dolnośląskie", "12520": "dolnośląskie", "12530": "opolskie", "12540": "śląskie", "12550": "śląskie", "12560": "śląskie", "12566": "małopolskie", "12570": "świętokrzyskie", "12575": "małopolskie", "12580": "podkarpackie", "12585": "świętokrzyskie", "12595": "lubelskie", "12600": "śląskie", "12625": "małopolskie", "12650": "małopolskie", "12660": "małopolskie", "12670": "podkarpackie", "12690": "podkarpackie", "12695": "podkarpackie", }; const provinceLabels: Record> = { "dolnośląskie": { pl: "dolnośląskie", en: "Lower Silesian" }, "kujawsko-pomorskie": { pl: "kujawsko-pomorskie", en: "Kuyavian-Pomeranian" }, "lubelskie": { pl: "lubelskie", en: "Lublin" }, "lubuskie": { pl: "lubuskie", en: "Lubusz" }, "łódzkie": { pl: "łódzkie", en: "Łódź" }, "małopolskie": { pl: "małopolskie", en: "Lesser Poland" }, "mazowieckie": { pl: "mazowieckie", en: "Masovian" }, "opolskie": { pl: "opolskie", en: "Opole" }, "podkarpackie": { pl: "podkarpackie", en: "Subcarpathian" }, "podlaskie": { pl: "podlaskie", en: "Podlaskie" }, "pomorskie": { pl: "pomorskie", en: "Pomeranian" }, "śląskie": { pl: "śląskie", en: "Silesian" }, "świętokrzyskie": { pl: "świętokrzyskie", en: "Świętokrzyskie" }, "warmińsko-mazurskie": { pl: "warmińsko-mazurskie", en: "Warmian-Masurian" }, "wielkopolskie": { pl: "wielkopolskie", en: "Greater Poland" }, "zachodniopomorskie": { pl: "zachodniopomorskie", en: "West Pomeranian" }, }; function simplifyProvinceName(value: string) { return value .normalize("NFD") .replace(/\p{Diacritic}/gu, "") .toLocaleLowerCase("pl-PL") .replace(/^wojewodztwo\s+/, "") .trim(); } const provinceBySimplifiedName = Object.fromEntries( Object.keys(provinceLabels).map((province) => [simplifyProvinceName(province), province]), ) as Record; export function getProvinceFromTeryt(code: string) { return provinceByTerytPrefix[code.trim().slice(0, 2)] ?? null; } export function getProvinceForStation(stationId: string | null) { return stationId ? provinceByStationId[stationId] ?? null : null; } export function normalizeProvinceName(value: string | null | undefined) { return value ? provinceBySimplifiedName[simplifyProvinceName(value)] ?? null : null; } export function formatProvinceName(province: Province, language: Language) { return provinceLabels[province][language]; }