import { message, SelectProps } from 'ant-design-vue';
import { isExternalLink, random, toDateString } from 'ele-admin-pro';
import router from '@/router';
import { listDictionaryData } from '@/api/system/dictionary-data';
import { ref } from 'vue';
import { pageProject } from '@/api/oa/project';
import { getJson } from '@/api/json';

/**
 * 常用函数封装
 */

// 生成编号
export function createCode(): string {
  const data = new Date();
  const code = `${data.getFullYear()}${data.getMonth()}${data.getDate()}${data.getHours()}${data.getMilliseconds()}`;
  return code.slice(0);
}

// 生成商户编号
export function createMerchantCode(): string {
  const data = new Date();
  const code = `${data.getFullYear()}${data.getMonth()}${data.getDate()}${data.getSeconds()}`;
  return code.slice(3);
}

// 生成订单编号
export function createOrderNo(): string {
  const data = new Date();
  const code = `${data.getFullYear()}${data.getMonth()}${data.getDate()}${data.getHours()}${data.getMilliseconds()}${random(
    8000,
    12000
  )}`;
  return code.slice(0);
}

// 跳转页面函数
export function openUrl(url, params?: null): void {
  const isExternal = isExternalLink(url);
  if (isExternal) {
    window.open(url);
  } else {
    if (params) {
      router.push({ path: url, query: params });
    } else {
      router.push(url);
    }
  }
}

// 跳转页面(不弹窗)
export function navTo(url): void {
  window.location.href = url;
}

// 手机号脱敏
export function getMobile(tel) {
  const reg = /^(\d{3})\d{4}(\d{4})$/;
  return tel.replace(reg, '$1****$2');
}

// 复制文本
export const copyText = (text) => {
  // 模拟 输入框
  const cInput = document.createElement('input');
  cInput.value = text;
  document.body.appendChild(cInput);
  cInput.select(); // 选取文本框内容

  // 执行浏览器复制命令
  // 复制命令会将当前选中的内容复制到剪切板中（这里就是创建的input标签）
  // Input要在正常的编辑状态下原生复制方法才会生效
  message.success('复制成功');
  document.execCommand('copy');

  // 复制成功后再将构造的标签 移除
  document.body.removeChild(cInput);
};

/**
 * 计算剩余时间
 * @param endTime
 */
export const getEndTime = (endTime) => {
  const setTime = new Date(endTime);
  const nowTime = new Date();
  const restSec = setTime.getTime() - nowTime.getTime();
  // 剩余天数
  const lastDay = parseInt(String(restSec / (60 * 60 * 24 * 1000) + 1));
  // let lastHour = parseInt(String((restSec / (60 * 60 * 1000)) % 24));
  // let lastMinu = parseInt(String((restSec / (60 * 1000)) % 60));
  // let lastSec = parseInt(String((restSec / 1000) % 60));

  // 过期状态
  if (lastDay < 30 && lastDay > 0) {
    return `<div class="ele-text-warning">${toDateString(
      endTime,
      'yyyy-MM-dd'
    )}</div><div class="ele-text-success">(${lastDay}天后过期)</div>`;
  }
  if (lastDay < 0) {
    return `<div class="ele-text-danger">${toDateString(
      endTime,
      'yyyy-MM-dd'
    )}</div><div class="ele-text-danger">(已过期)</div>`;
  }
  return `<div class="ele-text-info">${toDateString(
    endTime,
    'yyyy-MM-dd'
  )}</div>`;
};

/**
 * 获取字典数据作为下拉选项数据
 * @param dictCode
 */
export const getDictionaryOptions = (dictCode) => {
  const dictOptions = ref<SelectProps['options']>([]);
  const storageData = localStorage.getItem('__' + dictCode + '__');

  if (!storageData) {
    listDictionaryData({
      dictCode
    })
      .then((list) => {
        // 获取远程字典数据
        if (list.length > 0) {
          dictOptions.value = list.map((d) => {
            return {
              value: d.dictDataCode,
              label: d.dictDataName,
              text: d.dictDataName,
              comments: d.comments
            };
          });
          // 写入缓存
          localStorage.setItem(
            '__' + dictCode + '__',
            JSON.stringify(dictOptions.value)
          );
        } else {
          // 未定义则取默认的json数据
          dictOptions.value = getJson(dictCode);
        }
      })
      .catch((e) => {
        message.error(e.message);
      });
  } else {
    dictOptions.value = JSON.parse(storageData);
  }
  // listDictionaryData({
  //   dictCode
  // })
  //   .then((list) => {
  //     // 获取远程字典数据
  //     if (list.length > 0) {
  //       dictOptions.value = list.map((d) => {
  //         return {
  //           value: d.dictDataCode,
  //           label: d.dictDataName,
  //           text: d.dictDataName,
  //           comments: d.comments
  //         };
  //       });
  //       // 写入缓存
  //       localStorage.setItem(
  //         '__' + dictCode + '__',
  //         JSON.stringify(dictOptions.value)
  //       );
  //     } else {
  //       // 未定义则取默认的json数据
  //       dictOptions.value = getJson(dictCode);
  //     }
  //   })
  //   .catch((e) => {
  //     message.error(e.message);
  //   });
  return <any>dictOptions;
};

// 下拉选择项目
export const selectProject = (text: any) => {
  const data = ref<SelectProps['options']>([]);
  pageProject({ projectName: text }).then((result) => {
    data.value = result?.list.map((d) => {
      return {
        value: d.projectId,
        label: d.projectName,
        text: d.projectName
      };
    });
  });
  return data;
};

// 判断是否为图片
/*
 * @param: fileName - 文件名称
 */
export const isImage = (fileName) => {
  // 后缀获取
  let suffix = '';
  try {
    const flieArr = fileName.split('.');
    suffix = flieArr[flieArr.length - 1];
  } catch (err) {
    suffix = '';
  }
  const imgList = ['png', 'jpg', 'jpeg', 'bmp', 'gif'];
  return imgList.some((item) => {
    return item == suffix;
  });
};

export const getWeek = (text) => {
  const week = [
    '星期日',
    '星期一',
    '星期二',
    '星期三',
    '星期四',
    '星期五',
    '星期六'
  ];
  return week[text];
};

/**
 * 文件大小转换
 * @param text
 */
export const getFileSize = (text) => {
  if (text < 1024) {
    return text + 'B';
  } else if (text < 1024 * 1024) {
    return (text / 1024).toFixed(1) + 'KB';
  } else if (text < 1024 * 1024 * 1024) {
    return (text / 1024 / 1024).toFixed(1) + 'M';
  } else {
    return (text / 1024 / 1024 / 1024).toFixed(1) + 'G';
  }
};
