/**
 * 业务代码公用方法
 */
// import { MessageBox } from 'element-ui';
import Vue from 'vue';
import store from '@/store';
import config from '@/config/index';
import qs from 'qs';
const _config = config;

/**
 * 简单地二次确认弹窗
 * @param {string} warningText 提示字
 * @param {function} cb 确认后的回调方法
 * @param {*} params 回调方法中传入的参数
 * @param {function} eb 取消后的回调方法
 * @param {object} otherConfig 额外设置
 */
export const showConfirm = (warningText, cb, params, eb, otherConfig = {}) => {
  const { title = '', confirmButtonText = '确认', cancelButtonText = '取消' } = otherConfig;
  Vue.prototype.$confirm(warningText, title, {
    confirmButtonText,
    cancelButtonText,
  })
    .then(() => {
      cb && cb(params);
    })
    .catch((action) => {
      eb && eb({ ...params, action });
    });
};


/**
 * 处理下载参数 接口：http://yapi.gicdev.com/project/143/interface/api/7588
 * @param {Object} params { config, listParams, fieldList, path, pathName, query } = params
 * @param {*} config 导出组件传入的参数
 * @param {*} listParams 列表请求参数
 * @param {*} fieldList 可以筛选的list的数据，label key与后端一一对应
 * @param {String} path 当前请求的url
 * @param {String} pathName 当前请求的urlname
 * @param {*} Obj 需要加在path后的参数
 * @return {string}
 */
export const dealExportParams = ({ config, listParams, fieldList, path, pathName, query }) => {
  let params = {};
  let excel = { ...config };
  const valids = fieldList.filter(v => {
    return config.fields.includes(v.value);
  }) || [];
  const queryParams = qs.stringify(query);
  excel.sensKeys = valids.filter(v => v.sensKey).map(v => v.value);
  excel.fieldKeys = valids.map(v => v.value);
  excel.fieldNames = valids.map(v => v.label);
  excel.dataUrl = `${_config.api}/welfare${path}${queryParams ? '?' + queryParams : ''}`;
  excel.dataContent = pathName;
  delete excel.fields;
  params.excel = excel;
  if (store.state.project == 'wechat') {
    listParams.wechatId = store.state.currentAreaId;
  } else {
    listParams.memberCardId = store.state.currentAreaId;
  }
  params.listParams = listParams;
  return params;
};


/**
 * 获取/设置 localstorage中的 welfare-ct-id
 * @param {String} keyName 存储数据的key
 * @param {String} type get set remove(暂时没做remove)
 * @param {String} value 存储数据的value
 * @return {string} 返回key值
 */
export const dealMkStorage = (keyName, type = 'get', value) => {
  let market = window.localStorage.getItem('welfare-ct-id') || '{}';
  market = JSON.parse(market);
  if(type === 'get') {
    return market[keyName];
  } else if(type === 'set') {
    market[keyName] = value;
    window.localStorage.setItem('welfare-ct-id', JSON.stringify(market));
  }
};

/**
 * 给layout中的main切换样式
 * 场景：有些页面强制不要leftMenu（如新建图文），但是其实他是符合展示左侧条件的，只能通过样式切换控制
 * @param {Boolean} flag
 */
export const toggleEmpty = flag => {
  // 切换layout main的样式
  if(flag) {
    const main = document.querySelector('main.main');
    const oldClassName = main.className;
    main.className = `${oldClassName} big-main`;
  } else {
    const main = document.querySelector('main.main');
    const className = main.className.split(' ');
    const idx = className.findIndex(v => {
      return v === 'big-main';
    });
    className.splice(idx, 1);
    main.className = className.join(' ');
  }
};

/**
 * 将指定的时间转换为目标要求的毫秒值
 * @param {*} str 可以转换为时间格式  不传默认设置当前时间
 * @param {Number} type 将传入的str的时分秒转为指定要求  1.(00:00:00)  2.(23:59:59) 不传不设置
 * @return {string} 毫秒
 */
export const getTimesByReq = (str, type) => {
  const d = str ? new Date(str) : new Date();
  if (type == 1) {
    d.setHours(0);
    d.setMinutes(0);
    d.setSeconds(0);
    d.setMilliseconds(0);
  }
  if (type == 2) {
    d.setHours(23);
    d.setMinutes(59);
    d.setSeconds(59);
    d.setMilliseconds(999);
  }
  return d.getTime();
};


/**
 * 新开页至 系统-日志管理-营销日志
 * 注：这个营销日志是通知给用户的日志，譬如推送积分变更信息等，如果游戏没配中奖通知，那么参与记录点去日志将无数据
 * 示例：http://four.gicdev.com/damo-system/marking-logs?ecuId=179345913463168947&appCode=ecm&ecmId=190171903430495892
 * 目前跳转用到的地方有：ecm timming game（其他日志自己有log不需要）
 * @param {String} appCode 模块moduleCode
 * @param {String} id 主键
 * @param {Number} name 计划名称
 * @param {Number} ecuId ecuId
 */
export const toLog = (appCode, id, name, ecuId) => {
  if (!ecuId || !appCode) {
    return;
  }
  const url = `${window.location.origin}/damo-system/marking-logs?${qs.stringify({ appCode, id, name, ecuId })}`;
  if (process.env['NODE_ENV'] === 'development') { // eslint-disable-line
    console.log(url);
  } else {
    window.open(url, '_blank', 'noopener');
  }
};
// 处理时间
// export const formatDate = time => {
//   if (!isNaN(time)) time = Number(time);
//   let now = new Date(time);
//   let year = now.getFullYear();
//   let month = now.getMonth() + 1;
//   month >= 10 ? (month = month) : (month = '0' + month); //判断小于10月份的情况
//   let date = now.getDate();
//   date >= 10 ? (date = date) : (date = '0' + date); //判断小于10日的情况
//   let hour = now.getHours();
//   hour >= 10 ? (hour = hour) : (hour = '0' + hour); //判断小于10的时的情况
//   let minute = now.getMinutes();
//   minute >= 10 ? (minute = minute) : (minute = '0' + minute); //判断小于10的分的情况
//   let second = now.getSeconds();
//   second >= 10 ? (second = second) : (second = '0' + second); //判断小于10的秒的情况

//   return year + '-' + month + '-' + date + ' ' + hour + ':' + minute + ':' + second;
// };

//
/**
 * 时间戳转换成时分秒
 * @param {String} time 时间
 * @returns {String}
 */
export const getSeconds = (time) => {
  if (!isNaN(time)) time = Number(time);
  let now = new Date(time);
  let hour = now.getHours();
  hour < 10 && (hour = '0' + hour); // 判断小于10的时的情况
  let minute = now.getMinutes();
  minute < 10 && (minute = '0' + minute); // 判断小于10的分的情况
  let second = now.getSeconds();
  second < 10 && (second = '0' + second); // 判断小于10的秒的情况
  return hour + ':' + minute + ':' + second;
};

/**
 * 时间戳转换成时分08:10
 * @param {String} time 时间
 * @returns {String}
 */
export const getHours = (time) => {
  if (!isNaN(time)) time = Number(time);
  let now = new Date(time);
  let hour = now.getHours();
  hour >= 10 && (hour = '0' + hour); // 判断小于10的时的情况
  let minute = now.getMinutes();
  minute >= 10 && (minute = '0' + minute); // 判断小于10的分的情况
  return hour + ':' + minute;
};

/**
 * 时间戳转换成时分8:10
 * @param {String} time 时间
 * @returns {String}
 */
export const getHours2 = (time) => {
  if (!isNaN(time)) time = Number(time);
  let now = new Date(time);
  let hour = now.getHours();
  // hour >= 10 ? (hour = hour) : (hour = '0' + hour); //判断小于10的时的情况
  let minute = now.getMinutes();
  // minute >= 10 ? (minute = minute) : (minute = '0' + minute); //判断小于10的分的情况
  return hour + ':' + minute;
};

/**
 * 获取文件大小,obj为dom对象
 * @param {File} obj 文件类型
 * @returns {Number} 文件大小(单位为KB)
 */
export const getFileSize = (obj) => {
  let fileSize = 0;
  const isIE = /msie/i.test(navigator.userAgent) && !window.opera;
  if (isIE && !obj.files) {
    const filePath = obj.value;
    const fileSystem = new ActiveXObject('Scripting.FileSystemObject'); // eslint-disable-line
    const file = fileSystem.GetFile(filePath);
    fileSize = file.Size;
  } else {
    fileSize = obj.files[0].size;
  }
  return Math.round(fileSize / 1024); // 单位为KB
};
