import { apiRequest } from "@/lib/meshkee-api"; export type MeshkeeCityLevel = "country" | "province" | "city"; export interface MeshkeeCity { id: string; parentId: string | null; level: MeshkeeCityLevel; nameFa: string; nameEn: string; landlineCode: string | null; slug: string; sortOrder: number; } export function cityLabel(city: Pick) { if (city.nameFa && city.nameFa !== city.nameEn) { return `${city.nameEn} / ${city.nameFa}`; } return city.nameEn; } export function matchCityName( cities: MeshkeeCity[], name: string, ): MeshkeeCity | undefined { const needle = name.trim().toLowerCase(); if (!needle) return undefined; return cities.find( (city) => city.nameEn.toLowerCase() === needle || city.nameFa.toLowerCase() === needle || city.slug.toLowerCase() === needle, ); } export async function listMeshkeeCities(params: { level?: MeshkeeCityLevel; parentId?: string; parentSlug?: string; signal?: AbortSignal; }) { const query = new URLSearchParams(); if (params.level) query.set("level", params.level); if (params.parentId) query.set("parentId", params.parentId); if (params.parentSlug) query.set("parentSlug", params.parentSlug); const data = await apiRequest<{ items: Record[] }>( `/cities?${query}`, { signal: params.signal }, ); return (data.items ?? []).map((row) => ({ id: String(row.id), parentId: row.parentId == null ? null : String(row.parentId), level: String(row.level ?? "city") as MeshkeeCityLevel, nameFa: String(row.nameFa ?? ""), nameEn: String(row.nameEn ?? ""), landlineCode: row.landlineCode == null ? null : String(row.landlineCode), slug: String(row.slug ?? ""), sortOrder: Number(row.sortOrder ?? 0), })) satisfies MeshkeeCity[]; } export async function listIranProvinces(signal?: AbortSignal) { return listMeshkeeCities({ level: "province", parentSlug: "iran", signal, }); } export async function listCitiesInProvince( provinceId: string, signal?: AbortSignal, ) { return listMeshkeeCities({ level: "city", parentId: provinceId, signal, }); }