import { getProvinceForSelection } from "@/lib/provinces"; import type { WeatherWarning } from "@/types/imgw"; import type { SelectedLocation } from "@/types/location"; import type { Province } from "@/types/province"; const mazowieckieCountyTerytByName: Record = { bialobrzeski: "1401", ciechanowski: "1402", garwolinski: "1403", gostyninski: "1404", grodziski: "1405", grojecki: "1406", kozienicki: "1407", legionowski: "1408", lipski: "1409", losicki: "1410", makowski: "1411", minski: "1412", mlawski: "1413", nowodworski: "1414", ostrolecki: "1415", ostrowski: "1416", otwocki: "1417", piaseczynski: "1418", plocki: "1419", plonski: "1420", pruszkowski: "1421", przasnyski: "1422", przysuski: "1423", pultuski: "1424", radomski: "1425", siedlecki: "1426", sierpecki: "1427", sochaczewski: "1428", sokolowski: "1429", szydlowiecki: "1430", warszawski: "1431", warszawski_zachodni: "1432", wegrowski: "1433", wolominski: "1434", wyszkowski: "1435", zwolenski: "1436", zurominski: "1437", zyrardowski: "1438", ostroleka: "1461", plock: "1462", radom: "1463", siedlce: "1464", warszawa: "1465", }; function normalizeRegionName(value: string | null | undefined) { return value ?.replace(/[Łł]/g, "l") .normalize("NFD") .replace(/[\u0300-\u036f]/g, "") .toLocaleLowerCase("pl-PL") .replace(/^powiat\s+/, "") .replace(/^m\.\s*/, "") .replace(/^miasto\s+/, "") .replace(/\s+powiat$/, "") .replace(/\s+/g, "_") .replace(/[^a-z0-9_]/g, "") .replace(/^warszawa_zachodnia$/, "warszawski_zachodni") .trim() ?? ""; } function normalizeTerytCountyCode(value: string) { const code = value.trim(); return /^\d{4}/.test(code) ? code.slice(0, 4) : null; } export function getCountyTerytForLocation(province: string | null | undefined, district: string | null | undefined, locationName: string | null | undefined) { const normalizedProvince = getProvinceForSelection(province, null); if (normalizedProvince !== "mazowieckie") return null; const normalizedDistrict = normalizeRegionName(district); const districtMatch = normalizedDistrict ? mazowieckieCountyTerytByName[normalizedDistrict] : null; if (districtMatch) return districtMatch; const normalizedLocation = normalizeRegionName(locationName); return normalizedLocation ? mazowieckieCountyTerytByName[normalizedLocation] ?? null : null; } export function warningMatchesCounty(warning: WeatherWarning, countyTeryt: string | null | undefined) { if (!countyTeryt || !warning.terytCodes.length) return false; return warning.terytCodes.some((code) => normalizeTerytCountyCode(code) === countyTeryt); } export function warningMatchesLocalSelection(warning: WeatherWarning, province: Province | null, selectedLocation?: SelectedLocation | null) { if (warning.kind === "meteo" && selectedLocation?.countyTeryt) { return warningMatchesCounty(warning, selectedLocation.countyTeryt); } return province ? warning.provinces.includes(province) : false; }