import { areaList } from '@vant/area-data'

// 定义树形结构的类型
interface AreaNode {
    text: string
    value: string
    children?: AreaNode[]
}

/**
 * 将areaList转换为树形结构（省市县三级联动）
 * @returns 树形结构的地区数据
 */
export const convertToTree = (): AreaNode[] => {
    const { province_list, city_list, county_list } = areaList
    const tree: AreaNode[] = []

    // 遍历所有省份
    Object.entries(province_list).forEach(([provinceCode, provinceName]) => {
        const provinceNode: AreaNode = {
            text: provinceName,
            value: provinceCode,
            children: [],
        }

        // 查找该省份下的所有城市
        Object.entries(city_list).forEach(([cityCode, cityName]) => {
            // 城市代码的前两位与省份代码的前两位相同表示属于该省份
            if (cityCode.substring(0, 2) === provinceCode.substring(0, 2)) {
                const cityNode: AreaNode = {
                    text: cityName,
                    value: cityCode,
                    children: [],
                }

                // 查找该城市下的所有区县
                Object.entries(county_list).forEach(([countyCode, countyName]) => {
                    // 区县代码的前四位与城市代码的前四位相同表示属于该城市
                    if (countyCode.substring(0, 4) === cityCode.substring(0, 4)) {
                        cityNode.children!.push({
                            text: countyName,
                            value: countyCode,
                        })
                    }
                })

                provinceNode.children!.push(cityNode)
            }
        })

        tree.push(provinceNode)
    })

    return tree
}

// 导出树形结构数据
export const areaTree = convertToTree()

/**
 * 根据地区代码获取完整的地区名称（如：广东省广州市天河区）
 * @param code 地区代码
 * @returns 完整的地区名称
 */
export const getFullAreaName = (code: string): string => {
    const { province_list, city_list, county_list } = areaList
    let name = ''

    if (county_list[code]) {
        // 如果是区县代码，获取完整的省市县名称
        const cityCode = code.substring(0, 4) + '00'
        const provinceCode = code.substring(0, 2) + '0000'
        name = `${province_list[provinceCode]}${city_list[cityCode]}${county_list[code]}`
    } else if (city_list[code]) {
        // 如果是城市代码，获取完整的省市名称
        const provinceCode = code.substring(0, 2) + '0000'
        name = `${province_list[provinceCode]}${city_list[code]}`
    } else if (province_list[code]) {
        // 如果是省份代码，直接返回省份名称
        name = province_list[code]
    }

    return name
}

// 根据编号获取文本
export function getTextByCode(code) {
    // 遍历省份
    for (const provinceCode in areaList.province_list) {
        if (provinceCode === code) {
            return areaList.province_list[provinceCode]
        }
        // 遍历城市
        for (const cityCode in areaList.city_list) {
            if (cityCode === code) {
                return areaList.city_list[cityCode]
            }
            // 遍历区县
            for (const countyCode in areaList.county_list) {
                if (countyCode === code) {
                    return areaList.county_list[countyCode]
                }
            }
        }
    }
    return null
}

// 根据文本获取编号
export function getCodeByText(text) {
    // 遍历省份
    for (const provinceCode in areaList.province_list) {
        if (areaList.province_list[provinceCode] === text) {
            return provinceCode
        }
    }
    // 遍历城市
    for (const cityCode in areaList.city_list) {
        if (areaList.city_list[cityCode] === text) {
            return cityCode
        }
    }
    // 遍历区县
    for (const countyCode in areaList.county_list) {
        if (areaList.county_list[countyCode] === text) {
            return countyCode
        }
    }
    return null
}
