import { REGION_TREE } from './constants';

const PROVINCES = [
  '北京市', '天津市', '河北省', '山西省', '内蒙古自治区',
  '上海市', '江苏省', '浙江省', '安徽省', '福建省', '江西省', '山东省',
  '广东省', '广西壮族自治区', '海南省',
  '河南省', '湖北省', '湖南省',
  '辽宁省', '吉林省', '黑龙江省',
  '重庆市', '四川省', '贵州省', '云南省', '西藏自治区',
  '陕西省', '甘肃省', '青海省', '宁夏回族自治区', '新疆维吾尔自治区',
];

const MUNICIPALITIES = new Set(['北京市', '天津市', '上海市', '重庆市']);

export function parseAddressToRegion(fullAddress: string): {
  cityProvince: string;
  cityName: string;
} {
  const text = fullAddress.trim();
  if (!text) return { cityProvince: '', cityName: '' };

  const province = PROVINCES.find((item) => text.startsWith(item));
  if (!province) return { cityProvince: '', cityName: '' };

  const node = REGION_TREE.find((item) => item.province === province);
  if (!node) return { cityProvince: '', cityName: '' };

  if (MUNICIPALITIES.has(province)) {
    const municipalityCity = node.cities.find((city) => city === province) ?? node.cities[0] ?? '';
    return { cityProvince: province, cityName: municipalityCity };
  }

  const rest = text.slice(province.length);
  const sortedCities = [...node.cities].sort((a, b) => b.length - a.length);
  const city = sortedCities.find((item) => rest.startsWith(item)) ?? '';
  return { cityProvince: province, cityName: city };
}
