import { cascaderHn } from '/@/api/model/dict'

const storageKey = 'app_dict_data_area_cascaderHn'

let areaOptions = []
let areaMap = new Map()

/**
 * 构建扁平化字典Map，用于高效查询
 */
function buildAreaMap(nodes) {
    if (!nodes) return
    for (const node of nodes) {
        areaMap.set(node.value, node.text)
        if (node.children && node.children.length > 0) {
            buildAreaMap(node.children)
        }
    }
}

export async function getDictData() {
    // 先从本地加载数据
    let dictData = getLocalDict()
    if (!dictData) {
        // 如果本地没有数据，则从接口获取
        const res = await cascaderHn()
        const data = JSON.stringify(res[0].children).replace(/label/g, 'text')
        uni.setStorageSync(storageKey, data)
        dictData = JSON.parse(data)
    }

    areaOptions = dictData
    // 构建查询Map
    areaMap.clear()
    buildAreaMap(areaOptions)
    return dictData
}

/**
 *  获取本地数据
 */
export function getLocalDict() {
    const data = uni.getStorageSync(storageKey)
    if (data) {
        const dict = data ? JSON.parse(data) : null
        if (dict && areaMap.size === 0) {
            buildAreaMap(dict)
        }
        return dict
    }
    return null
}

/**
 *  刷新数据
 */
export function refreshDictData() {
    // 删除本地数据
    uni.removeStorageSync(storageKey)
    // 重新获取数据
    getDictData()
}

export function getText(scope: string, spliced: string) {
    if (!scope) return ''
    
    // 如果Map尚未初始化，则回退到原始递归方法或返回空
    if (areaMap.size === 0) {
        const dict = getLocalDict()
        if (!dict) return ''
    }

    const values = scope.split(',')
    const labels = values.map(val => areaMap.get(val.trim()) || val.trim())

    return labels.join(spliced || '')
}
