// 可以将此代码放置于项目src/hooks/useColPickerData.ts中
import { useCascaderAreaData } from '@vant/area-data';

export type CascaderOption = {
  text: string
  value: string
  children?: CascaderOption[]
}

/**
 * 使用'@vant/area-data'作为数据源，构造ColPicker组件的数据
 * @param filterKeywords 可选的过滤关键词数组，包含这些关键词的地址将被过滤掉
 * @returns
 */
export function useColPickerData(filterKeywords?: string[]) {
  // '@vant/area-data' 数据源
  const originalData: CascaderOption[] = useCascaderAreaData();

  /**
   * 递归过滤数据，过滤掉包含指定关键词的地址项
   * @param data 要过滤的数据数组
   * @param keywords 过滤关键词数组
   * @returns 过滤后的数据数组
   */
  function filterDataByKeywords(data: CascaderOption[], keywords: string[]): CascaderOption[] {
    if (!keywords || keywords.length === 0) {
      return data;
    }

    return data.filter((item) => {
      // 检查当前项的text是否包含任何关键词
      const shouldFilter = keywords.some((keyword) => item.text.includes(keyword));

      // 如果当前项包含关键词，则过滤掉
      if (shouldFilter) {
        return false;
      }

      // 如果有子项，递归过滤子项
      if (item.children && item.children.length > 0) {
        item.children = filterDataByKeywords(item.children, keywords);
      }

      return true;
    });
  }

  // 应用过滤
  const colPickerData: CascaderOption[] = filterKeywords
    ? filterDataByKeywords(originalData, filterKeywords)
    : originalData;

  // 根据code查找子节点，不传code则返回所有节点
  function findChildrenByCode(data: CascaderOption[], code?: string): CascaderOption[] | null {
    if (!code) {
      return data;
    }
    for (const item of data) {
      if (item.value === code) {
        return item.children || null;
      }
      if (item.children) {
        const childrenResult = findChildrenByCode(item.children, code);
        if (childrenResult) {
          return childrenResult;
        }
      }
    }
    return null;
  }

  return { colPickerData, findChildrenByCode };
}
