// 定义源数据类型
type SourceRegion = {
    name: string;
    shortCode?: string;
    regions?: SourceRegion[];
    [key: string]: any; // 允许其他自定义属性
};

// 定义目标数据类型
type TargetRegion = {
    name: string;
    value?: string | number; // 添加 value 字段
    children?: TargetRegion[];
    [key: string]: any;
};

/**
 * 将任意结构的地区数据转换为统一的嵌套结构
 * @param data 源数据数组
 * @param keys 字段映射配置
 * @returns 转换后的数据
 */
export function convertRegions(
    data: SourceRegion[],
    keys: {
        nameKey?: string;
        valueKey?: string; // 新增：指定 value 字段
        regionsKey?: string;
        childrenKey?: string;
    } = {}
): TargetRegion[] {
    const {
        nameKey = 'name',
        valueKey = 'shortCode', // 默认使用 shortCode 作为 value
        regionsKey = 'regions',
        childrenKey = 'children',
    } = keys;

    return data.map(item => {
        const converted: TargetRegion = {
            name: item[nameKey] as string,
        };

        // 如果指定了 valueKey 且源数据中存在该字段，则添加 value
        if (valueKey && item[valueKey] !== undefined) {
            converted.value = item[valueKey];
        }

        if (item[regionsKey]) {
            const children = convertRegions(
                item[regionsKey] as SourceRegion[],
                keys // 传递 keys 以保持配置一致
            );
            if (children.length > 0) {
                converted[childrenKey] = children;
            }
        }

        return converted;
    });
}


/***
 * 使用示例
 * regionsData 是原数据
 *  
 * 
 * const transformed = convertRegions(regionsData, {
 *   nameKey: 'name',       // 源数据中表示“名称”的字段
 *   regionsKey: 'regions', // 源数据中表示“子级区域”的字段
 *   childrenKey: 'children' // 输出结构中表示“子级区域”的字段
 * });
 * 
 * 
 * 输出示例：
*  [
*      {
*         "name": "北京市",
*         "value": "BJ",
*         "children": [
*              {
*                  "name": "东城区",
*                 "value": "Dongcheng"
*             },
*             // ...
*          ]
*      }
*  ]
 */