import { $post, $postParam, qsRepeatParams } from "@/plugins/axios";

// user-manage
export const userListPage = (datas) => {
  return $postParam("/api/admin/user/query", datas);
};
export const userRoleList = (datas) => {
  return $postParam("/api/admin/user/roles", datas);
};
export const userListQuery = (datas) => {
  return $postParam("/api/admin/user/list", datas);
};
export const resetPwd = (password) => {
  return $postParam("/api/admin/user/change_password", { password });
};
export const userInsertOrUpdate = (datas) => {
  const url = datas.id ? "/api/admin/user/update" : "/api/admin/user/insert";
  return $postParam(url, datas, {
    paramsSerializer: qsRepeatParams,
  });
};
export const userPermissionQuery = (userId) => {
  return $postParam("/api/admin/user/permission/query", { userId });
};
export const userPermissionSave = (datas) => {
  return $post("/api/admin/user/permission/save", datas);
};

// org-manage
export const orgTypesList = () => {
  return $postParam("/api/admin/org/types", {});
};
export const orgQuery = (datas) => {
  return $postParam("/api/admin/org/query", datas);
};
export const orgInsertOrUpdate = (datas) => {
  let formData = new FormData();
  Object.entries(datas).forEach(([key, val]) => {
    // if (val === null || val === "null" || val === "") return;

    if (key === "subTypes") {
      if (val.length) {
        val.forEach((type) => formData.append("subTypes", type));
      } else {
        formData.append("subTypes", "");
      }
    } else {
      formData.append(key, datas[key]);
    }
  });

  if (datas.id) {
    return $post("/api/admin/org/update", formData);
  } else {
    return $post("/api/admin/org/insert", formData);
  }
};
// 启用/禁用
export const orgToggle = (datas) => {
  return $postParam("/api/admin/org/toggle", datas);
};

// wechat-app-manage
/**
 * @description 微信小程序查询
 * @params { string } id  // 应用ID
 * @params { string } nameStartWith  // 名称前缀
 * @params { string } pageNumber  // 页码
 * @params { string } pageSize  // 数量
 */
export const getWeChatAppList = (data) => {
  const params = Object.entries(data).reduce((p, [key, val]) => {
    if (val) {
      p[key] = val;
    }
    return p;
  }, {});
  return $post("/api/admin/wxapp/query", new URLSearchParams(params));
};

/**
 * @description 微信小程序新增
 * @params { string } id  // 应用ID
 * @params { string } name  // 名称
 * @params { string } secret  // 密钥
 */
export const insertWeChatApp = (data) => {
  return $post("/api/admin/wxapp/insert", new URLSearchParams(data));
};

/**
 * @description 微信小程序修改
 * @params { string } id  // 应用ID
 * @params { string } name  // 名称
 * @params { string } secret  // 密钥
 */
export const updateWeChatApp = (data) => {
  return $post("/api/admin/wxapp/update", new URLSearchParams(data));
};

// app-manage
export const appQuery = (datas) => {
  return $postParam("/api/admin/app/query", datas);
};
export const appList = (datas = {}) => {
  // id/code/nameStartWith
  return $postParam("/api/admin/app/list", datas);
};
export const appInsertOrUpdate = (datas) => {
  if (datas.id) {
    return $postParam("/api/admin/app/update", datas);
  } else {
    return $postParam("/api/admin/app/insert", datas);
  }
};
// app-user-manage
export const appUserList = (appId) => {
  return $postParam("/api/admin/app/user/list", { id: appId });
};
export const appBindUser = ({ appId, userId }, isBind) => {
  if (isBind) {
    return $postParam("/api/admin/app/user/bind", { id: appId, userId });
  } else {
    return $postParam("/api/admin/app/user/unbind", { id: appId, userId });
  }
};

// app-module-manage
export const appModuleList = (datas) => {
  return $postParam("/api/admin/module/list", datas);
};
export const appModuleTypes = () => {
  return $postParam("/api/admin/module/types", {});
};
export const appModuleInsertOrUpdate = (datas) => {
  if (datas.id) {
    return $postParam("/api/admin/module/update", datas);
  } else {
    return $postParam("/api/admin/module/insert", datas);
  }
};
export const appModuleEnable = ({ id, enable }) => {
  return $postParam("/api/admin/module/update", { id, enable });
};
// app-version-manage
export const appVersionList = (datas) => {
  return $postParam("/api/admin/version/query", datas);
};
export const appSetMasterVersion = ({ appId, versionId }) => {
  return $postParam("/api/admin/app/master_version", { id: appId, versionId });
};
export const appVersionInsertOrUpdate = (datas) => {
  if (datas.id) {
    return $postParam("/api/admin/version/update", datas);
  } else {
    return $postParam("/api/admin/version/insert", datas);
  }
};
// app-env-manage
export const envList = () => {
  return $postParam("/api/admin/env/list", {});
};
export const appEnvList = (datas) => {
  return $postParam("/api/admin/env/app/list", datas);
};
export const appEnvTypes = () => {
  return $postParam("/api/admin/env/types", {});
};
export const appEnvInsertOrUpdate = (datas) => {
  if (datas.id) {
    return $postParam("/api/admin/env/update", datas);
  } else {
    return $postParam("/api/admin/env/insert", datas);
  }
};
// app-config
export const appConfigGroups = () => {
  return $postParam("/api/admin/property/groups", {});
};
export const appConfigModes = () => {
  return $postParam("/api/admin/property/modes", {});
};
// baseline
export const appConfigBaseline = (datas) => {
  return $postParam("/api/admin/property/baseline", datas);
};
export const appConfigBaselineUpdate = (datas, headerData) => {
  return $post("/api/admin/property/baseline/update", datas, {
    headers: headerData,
  });
};
export const appConfigBaselineItemUpdate = (datas) => {
  return $postParam("/api/admin/property/baseline/item/update", datas);
};
export const appConfigList = (datas) => {
  return $postParam("/api/admin/property/list", datas);
};
export const appConfigItemUpdate = (datas) => {
  return $postParam("/api/admin/property/item/update", datas);
};
export const appConfigItemDelete = (datas) => {
  return $postParam("/api/admin/property/item/delete", datas);
};
// app-nginx
export const appNginxConfig = (datas) => {
  return $postParam("/api/admin/nginx/find", datas);
};
export const appNginxConfigUpdate = (datas) => {
  return $postParam("/api/admin/nginx/update", datas);
};

// app-deploy-manage
export const deployList = () => {
  return $postParam("/api/admin/deploy/list", {});
};
export const appDeployList = (datas) => {
  return $postParam("/api/admin/deploy/query", datas);
};
export const appDeploySecret = (deviceId) => {
  return $postParam("/api/admin/deploy/secret", { id: deviceId });
};
export const appDeployCustomParams = (appId) => {
  return $postParam("/api/admin/deploy/control/params", { appId });
};
export const appDeployModes = () => {
  return $post("/api/admin/deploy/modes", {});
};
export const appDeployInsertOrUpdate = (datas) => {
  if (datas.id) {
    return $post("/api/admin/deploy/update", datas);
  } else {
    return $post("/api/admin/deploy/insert", datas);
  }
};
export const appDeployLicenseDownload = (datas) => {
  return $postParam("/api/admin/deploy/license/download", datas, {
    responseType: "blob",
  });
};
// app-deploy-org
export const appDeployOrgList = (deployId) => {
  return $postParam("/api/admin/deploy/org/list", { id: deployId });
};
export const appDeployOrgUpdate = (datas) => {
  return $postParam("/api/admin/deploy/org/update", datas, {
    paramsSerializer: qsRepeatParams,
  });
};
// app-deploy-devive
export const appDeployDeviceList = (deployId) => {
  return $postParam("/api/admin/deploy/device/list", { id: deployId });
};
export const appDeployDeviceInfo = (deviceId) => {
  return $postParam("/api/admin/deploy/device/info", { deviceId });
};

export const appDeployDeviceSave = (datas) => {
  let formData = new FormData();
  Object.keys(datas).forEach((key) => {
    formData.append(key, datas[key]);
  });
  return $post("/api/admin/deploy/device/save", formData);
};
export const appDeployDeviceDelete = ({ deployId, deviceId }) => {
  return $postParam("/api/admin/deploy/device/delete", {
    id: deployId,
    deviceId,
  });
};

export const ocrListQuery = () => {
  return $postParam("/api/admin/ocr/supplier/list");
};

export const ocrInsertOrUpdate = (datas) => {
  const url = datas.id
    ? "/api/admin/ocr/supplier/update"
    : "/api/admin/ocr/supplier/insert";
  return $postParam(url, datas, {
    paramsSerializer: qsRepeatParams,
  });
};

export const ocrSupplierDetail = (params) => {
  return $postParam("/api/admin/ocr/supplier/detail", params);
};

export const orgTestApi = (datas) => {
  let formData = new FormData();
  Object.entries(datas).forEach(([key, val]) => {
    formData.append(key, datas[key]);
  });
  return $post("/api/admin/ocr/supplier/test", formData);
};

export const modelSupplierListQuery = () => {
  return $postParam("/api/admin/llm/supplier/list");
};

export const ModelSupplierInsertOrUpdate = (datas) => {
  const url = datas.id
    ? "/api/admin/llm/supplier/update"
    : "/api/admin/llm/supplier/insert";
  return $postParam(url, datas, {
    paramsSerializer: qsRepeatParams,
  });
};

export const modelSupplierDetail = (params) => {
  return $postParam("/api/admin/llm/supplier/detail", params);
};

export const modelListQuery = (params) => {
  return $postParam("/api/admin/llm/model/list", params);
};
export const ModelInsertOrUpdate = (datas) => {
  const url = datas.id
    ? "/api/admin/llm/model/update"
    : "/api/admin/llm/model/insert";
  return $postParam(url, datas, {
    paramsSerializer: qsRepeatParams,
  });
};

export const cueWordListQuery = (params) => {
  return $postParam("/api/admin/llm/model/prompt_template/list", params);
};
export const appTypeList = (datas = {}) => {
  return $postParam("/api/admin/llm/app_types", datas);
};
export const cueWrdInsertOrUpdate = (datas) => {
  const url = datas.id
    ? "/api/admin/llm/model/prompt_template/update"
    : "/api/admin/llm/model/prompt_template/insert";
  return $postParam(url, datas, {
    paramsSerializer: qsRepeatParams,
  });
};

export const orgSetListQuery = (params) => {
  return $postParam("/api/admin/llm/org_config/query", params);
};

export const orgSetInsertOrUpdate = (datas, isEdit) => {
  const url = isEdit
    ? "/api/admin/llm/org_config/update/model_prompt"
    : "/api/admin/llm/org_config/insert";
  return $postParam(url, datas, {
    paramsSerializer: qsRepeatParams,
  });
};

export const orgSetAddCount = (datas) => {
  return $postParam("/api/admin/llm/org_config/update/permit_count", datas);
};

export const promptDelete = (datas) => {
  return $postParam("/api/admin/llm/model/prompt_template/delete", datas);
};

export const authorizeFileDownload = (datas) => {
  return $post("/api/admin/deploy/license/encrypt", datas, {
    responseType: "blob",
  });
};
export const appDeployDeviceView = (datas) => {
  let formData = new FormData();
  Object.keys(datas).forEach((key) => {
    formData.append(key, datas[key]);
  });
  return $post("/api/admin/deploy/license/decrypt", formData);
};