import { defHttp } from '/@/utils/http/axios';

import { useMessage } from '/@/hooks/web/useMessage';



const { createConfirm } = useMessage();



enum Api {

  list = '/datasource/list',

  getInfoById = '/datasource/queryById',

  save = '/datasource/add',

  edit = '/datasource/edit',

  deleteOne = '/datasource/delete',

  deleteBatch = '/datasource/deleteBatch',

  allList = '/datasource/queryAllList',

  importExcel = '/datasource/importExcel',

  exportXls = '/datasource/exportXls',

  connTest = '/datasource/connect',

  syncModels = '/datasource/sync_models',

  types = '/datasource/types',

  config = '/datasource/config',

}

/**

 * 列表接口

 * @param params

 */

export const list = (params) => {

  return defHttp.get({ url: Api.list, params }).catch((error) => {

    console.error('获取数据源列表失败:', error);

    throw error;

  });

};

/**

 * 详情接口

 * @param params

 */

export const getInfoById = (params) => defHttp.get({ url: Api.getInfoById, params });

/**

 * 删除单个

 */

export const deleteOne = (params, handleSuccess) => {

  return defHttp.delete({ url: Api.deleteOne, params }, { joinParamsToUrl: true }).then(() => {

    handleSuccess();

  });

};

/**

 * 批量删除

 * @param params

 */

export const batchDelete = (params, handleSuccess) => {

  createConfirm({

    iconType: 'warning',

    title: '确认删除',

    content: '是否删除选中数据',

    okText: '确认',

    cancelText: '取消',

    onOk: () => {

      return defHttp.delete({ url: Api.deleteBatch, data: params }, { joinParamsToUrl: true }).then(() => {

        handleSuccess();

      });

    },

  });

};

/**

 * 保存或者更新

 * @param params

 */

export const saveOrUpdate = (params, isUpdate) => {

  const url = isUpdate ? Api.edit : Api.save;

  return defHttp.post({ url: url, params });

};

/**

 * 全量列表接口

 * @param params

 */

export const allList = (params) => defHttp.get({ url: Api.allList, params });

/**

 * 导入api

 */

export const getImportUrl = Api.importExcel;

/**

 * 导出api

 * @param params

 */

export const getExportUrl = Api.exportXls;

/**

 * 连接测试

 * @param params

 */

export const ConnTest = (params) => {

  return defHttp.post({ url: Api.connTest, params, timeout: 60 * 1000 });

};



/**

 * 同步数据模型

 */

export const syncModels = (params) => {

  return defHttp.post({ url: Api.syncModels, params, timeout: 60 * 1000 });

};



/**

 * 获取所有数据源类型

 */

export const getDataSourceTypes = (params?) => defHttp.get({ url: Api.types, params });



/**

 * 根据数据源类型获取连接配置

 */

export const getDataSourceConfig = (type: string) => defHttp.get({ url: `${Api.config}/${type}` });