import api from "@/axios";
import { isEmpty } from "lodash-es";
import { reactive, ref, toRefs } from "vue";

interface DataOptionsType {
  managementUserList: SelectNodeVo<
    string,
    { avatar: string; sex: SelectNodeVo<string> }
  >[];
  roleList: SelectNodeVo<string, { remark: string }>[];
}

const fetchData = async <T>(
  url: string,
  params?: Record<string, any>
): Promise<T> => {
  try {
    return (await api.get<T>(url, params)).data as T;
  } catch (error) {
    console.error(`Error fetching data from ${url}:`, error);
    return [] as T;
  }
};

// const fetchDataOptions: {
//   [key in keyof DataOptionsType]: (
//     params?: Record<string, any>
//   ) => Promise<DataOptionsType[key]>;
// } = {
//   managementUserList: async () =>
//     await fetchData<DataOptionsType["managementUserList"]>(
//       "/dataOptions/mUserList"
//     ),
//   roleList: async () =>
//     await fetchData<DataOptionsType["roleList"]>("/dataOptions/roleList"),
// };

// export const useDataOptions = (
//   type: keyof DataOptionsType | (keyof DataOptionsType)[],
//   opts?: {
//     params?: { [key in keyof DataOptionsType]?: Record<string, any> };
//   }
// ) => {
//   //所有数据是否加载完成
//   const isComplete = ref(false);
//   const allData = reactive<Partial<DataOptionsType>>({});
//
//   // 初始化数据
//   (Array.isArray(type) ? type : [type]).forEach((t) => {
//     allData[t] = [];
//   });
//
//   const refreshData = async (
//     type: keyof DataOptionsType | (keyof DataOptionsType)[]
//   ) => {
//     isComplete.value = false;
//     const ps = (Array.isArray(type) ? type : [type]).map((t) =>
//       fetchDataOptions[t](opts?.params?.[t]).then(
//         (data) => (allData[t] = data as any)
//       )
//     );
//     if (!isEmpty(ps)) {
//       await Promise.all(ps);
//     }
//     isComplete.value = true;
//   };
//
//   refreshData(type);
//
//   return {
//     refreshData,
//     isComplete,
//     ...toRefs(allData),
//   };
// };
