import citiesJson from "@/lib/data/cities.json";
import provincesJson from "@/lib/data/provinces.json";

export type IranProvince = {
  id: number;
  name: string;
  slug: string;
  tel_prefix: string;
};

export type IranCity = {
  id: number;
  name: string;
  slug: string;
  province_id: number;
  county_id: number;
};

export const IRAN_PROVINCES = [...(provincesJson as IranProvince[])].sort((a, b) =>
  a.name.localeCompare(b.name, "fa"),
);

export const IRAN_CITIES = citiesJson as IranCity[];

const citiesByProvince = new Map<number, IranCity[]>();
for (const city of IRAN_CITIES) {
  const list = citiesByProvince.get(city.province_id);
  if (list) list.push(city);
  else citiesByProvince.set(city.province_id, [city]);
}
for (const list of citiesByProvince.values()) {
  list.sort((a, b) => a.name.localeCompare(b.name, "fa"));
}

export function findProvinceByName(name: string): IranProvince | undefined {
  const trimmed = name.trim();
  if (!trimmed) return undefined;
  return IRAN_PROVINCES.find((p) => p.name === trimmed);
}

export function citiesForProvinceName(provinceName: string): IranCity[] {
  const province = findProvinceByName(provinceName);
  if (!province) return [];
  return citiesByProvince.get(province.id) ?? [];
}

export function filterCities(cities: IranCity[], query: string): IranCity[] {
  const q = query.trim();
  if (!q) return cities;
  return cities.filter((c) => c.name.includes(q));
}
