import request from '@/utils/request'
import { lookFaceFile, lookFile } from '@/utils/bonus'
import useBase64 from '@/api/base64Utils'

/**
 * 下载文件
 * @param filePath 文件路径
 * @param fileName 文件名称 如果没有名称  请填写 "" 不要填 null
 */
export function downloadFile(filePath, fileName) {
  let lookFiles = lookFile()
  let lookFaceFiles = lookFaceFile()
  showLoadingIndicator();
  //判断filePath第一个字符是否/
  if (filePath.charAt(0) === '/') {
    filePath = filePath.includes('http') ? filePath : `${lookFiles}${filePath}`
  }else{
    filePath = filePath.includes('http') ? filePath : `${lookFaceFiles}${filePath}`
  }
  const xhr = new XMLHttpRequest();
  xhr.open('GET', filePath, true);
  xhr.responseType = 'blob';

  xhr.onload = () => {
    const blob = xhr.response;
    const url = window.URL.createObjectURL(blob);
    const a = document.createElement('a');
    a.style.display = 'none';
    a.href = url;
    a.download = fileName === "" ? filePath.split("/")[filePath.split("/").length - 1] : fileName;
    document.body.appendChild(a);
    a.click();
    window.URL.revokeObjectURL(url);
    // Hide loading indicator
    hideLoadingIndicator();
  };

  xhr.onerror = () => {
    // Hide loading indicator in case of error
    hideLoadingIndicator();
    console.error('File download failed');
  };
  xhr.send();
}

function showLoadingIndicator() {
  const loadingDiv = document.createElement('div');
  loadingDiv.id = 'loading-indicator';
  loadingDiv.style.position = 'fixed';
  loadingDiv.style.top = '50%';
  loadingDiv.style.left = '50%';
  loadingDiv.style.transform = 'translate(-50%, -50%)';
  loadingDiv.style.padding = '15px';
  loadingDiv.style.backgroundColor = 'rgba(66,65,65,0.7)';
  loadingDiv.style.color = 'white';
  loadingDiv.style.borderRadius = '5px';
  loadingDiv.innerText = 'Loading...';
  document.body.appendChild(loadingDiv);
}

function hideLoadingIndicator() {
  const loadingDiv = document.getElementById('loading-indicator');
  if (loadingDiv) {
    document.body.removeChild(loadingDiv);
  }
}

/**
 * 查询字典表数据 下拉框
 * @param query {{dictValue: string, dictType: string}}
 * @returns {*}
 */
export function dictTableOption(query) {
  return request({
    url: '/system/select/getDictTableOption',
    method: 'post',
    data: query
  })
}

/**
 * 查询工程负责人
 * @param query
 * @returns {*}
 */
export function getProLeaderOption(query) {
  return request({
    url: '/system/select/getProLeaderOption',
    method: 'post',
    data: query
  })
}

/**
 * 查询工程地址
 * @param query
 * @returns {*}
 */
export function selectProAddress(query) {
  return request({
    url: '/system/select/selectProAddress',
    method: 'post',
    data: query
  })
}

/**
 * 查询工程
 * @param query
 * @returns {*}
 */
export function selectPro(query) {
  return request({
    url: '/system/select/getProOptions',
    method: 'post',
    data: query
  })
}
/**
 * 查询承包商
 * @param query
 * @returns {*}
 */
export function selectCons(query) {
  return request({
    url: '/system/select/selectCons',
    method: 'post',
    data: query
  })
}

/**
 * 查询上传材料
 * @param query
 * @returns {*}
 */
export function selectMaterial(query) {
  return request({
    url: '/system/select/selectMaterial',
    method: 'post',
    data: query
  })
}

/**
 * 查询监理单位
 * @param query
 * @returns {*}
 */
export function selectSupervisionUnit(query) {
  return request({
    url: '/system/select/selectSupervisionUnit',
    method: 'post',
    data: query
  })
}

/**
 * 查询监理单位人员
 * @param query
 * @returns {*}
 */
export function selectSupervisionUnitUser(query) {
  return request({
    url: '/system/select/selectSupervisionUnitUser',
    method: 'post',
    data: query
  })
}

/**
 * 查询文件信息
 * @param query
 *  id : this.proId, 工程/承包商/分包商id/分包商id/施工人员id/监理人员id
 *  classification: '1',  //查询大类: 1 监理 2 承包商 3 分包商 4 施工人员  5监理人员
 *  fromType : '1', //文件来源: 1 材料文件 2 施工人员文件 3 监理人员文件
 *  informationType : '1', //
 * 当`来源类型`为 1 时：
 * 1：企业资质
 * 2：安全协议书
 * 3：四措两案
 * 4：安全工器具
 * 5：其他材料
 * 6：开工申请单
 * 7：开工申请单附件
 * 8：施工材料
 * 9：建立规划
 * 10：实施细则
 * 当`来源类型`为 2 时：
 * 1：体检文件
 * 2：保险文件
 * 3：特殊工种文件
 * 4：其他文件
 * @returns {*}
 */
export function selectFile(query) {
  return request({
    url: '/system/select/selectFile',
    method: 'post',
    data: query
  })
}

/**
 * 查询设备信息
 * @param query
 * @returns {*}
 */
export function selectDeviceInformation(query) {
  return request({
    url: '/system/select/selectDeviceInformation',
    method: 'post',
    data: query
  })
}

/**
 * 查询设备类型
 * @param query
 * @returns {*}
 */
export function selectDeviceType(query) {
  return request({
    url: '/system/select/selectDeviceType',
    method: 'post',
    data: query
  })
}
/**
 * 查询工程下拉选
 * @param query
 * @returns {*}
 */
export function getProName(query) {
  return request({
    url: '/system/select/getProOptions',
    method: 'post',
    data: query
  })
}
/**
 * 查询审批业务类型
 * @param query
 * @returns {*}
 */
export function queryTheApprovalServiceType(query) {
  return request({
    url: '/system/select/queryTheApprovalServiceType',
    method: 'post',
    data: query
  })
}

/**
 * 获取承包商提交材料选项
 * @param data
 * @returns {*}
 */
export function getUploadMaterialOptions(data) {
  return request({
    url: '/system/select/getUploadMaterialOptions',
    method: 'post',
    data: data,
  });
}
/**
 * 获取首页下载材料示例模板
 * @param data
 * @returns {*}
 */
export function getMaterialList(data) {
  return request({
    url: '/system/select/getMaterialList',
    method: 'post',
    data: data,
  });
}

/**
 * 查询审批业务类型
 * @param query
 * @returns {*}
 */
export function personnelDropDownBox(query) {
  return request({
    url: '/system/select/personnelDropDownBox',
    method: 'post',
    data: query
  })
}

/**
 * 检查施工人员是否存在当前工程下
 * @param query
 * @returns {*}
 */
export function checkIsExistPerson(query) {
  return request({
    url: '/system/select/checkIsExistPerson',
    method: 'post',
    data: query
  })
}

/**
 * 获取模板路径
 * @param query
 * @returns {AxiosPromise}
 */
export function getTemplateLink(query) {
  return request({
    url: '/system/select/getTemplateLink',
    method: 'post',
    data: query
  })
}

