/**
 * 判断是否为空
 */
export function isNull(o) {
  if (o === null || o === undefined || o === '') {
    return true;
    // eslint-disable-next-line
  } else if (Array.prototype.isPrototypeOf(o) && o.length === 0) {
    return true;
    // eslint-disable-next-line
  } else if (Object.prototype.isPrototypeOf(o) && Object.keys(o).length === 0) {
    return true;
  }
  return false;
}

/**
 * 判断是否为非空
 */
export function isNotNull(o) {
  return !isNull(o);
}

/**
 * 防抖
 * vue中method的this指向为vue实例，所以在调用时 fnName 得写函数名
 * @param fnName
 * @param time
 * @returns {Function}
 */
export function debounce(fnName, time = 500) {
  let timer = null;
  return function () {
    if (timer) {
      clearTimeout(timer);
    }
    timer = setTimeout(() => {
      this[fnName]();
    }, time);
  };
}

/**
 * 节流
 * @param fnName
 * @param time
 * @returns {Function}
 */
export function throttle(fnName, time = 500) {
  let canRun = true;
  return function () {
    if (!canRun) return;
    canRun = false;
    setTimeout(() => {
      this[fnName]();
      canRun = true;
    }, time);
  };
}

/**
 * 例如：生成x轴单位：过去一周（包括今天），'yyyy-mm-dd'
 * return ['2020-01-20'] | ['01-20']
 * 假如出现跨年，字符串带上年份，反之不带
 * @returns [ date_string ]
 */
export function generateDayPassed(number = 7) {
  let arr = [];
  for (let i = 0; i < number; i++) {
    arr.push(getDay(i - (number - 1)));
  }
  // 假如出现跨年，字符串带上年份，反之不带
  let tempYear = arr[0].slice(0, 4);
  arr = arr.map(item => {
    if (tempYear === item.slice(0, 4)) {
      return item.slice(5); // '03-31'
    } else {
      return item; // '2020-03-31'
    }
  });
  return arr;
}

// 工具：参数为整数，0为当天，1为明天，-1为昨天；return 2020-01-20
function getDay(day) {
  let today = new Date(),
    targetDay_milliseconds = today.getTime() + 1000 * 60 * 60 * 24 * day;
  today.setTime(targetDay_milliseconds); //注意，这行是关键代码
  let tYear = today.getFullYear(),
    tMonth = today.getMonth(),
    tDate = today.getDate();
  tMonth = doHandleMonth(tMonth + 1);
  tDate = doHandleMonth(tDate);
  return tYear + '-' + tMonth + '-' + tDate;
}

// 补零
function doHandleMonth(month) {
  let m = month;
  if (month.toString().length == 1) {
    m = '0' + month;
  }
  return m;
}
// 判断开始时间不能大于结束时间
export function checkStartAndEnd(target = { startTime: '', endTime: '' }) {
  console.log('', target.startTime, target.endTime);
  let isTimeContained = false;
  const target_startTime = stringTimeToNumber(target.startTime);
  const target_endTime = stringTimeToNumber(target.endTime);
  if (target_startTime < target_endTime) {
    isTimeContained = true;
  }
  return isTimeContained;
}
/**
 * 判断时间是否在参数时间区间中
 * 先判断 周期
 * 再判断 时间区间
 * 参数：时间类型为 'HH:mm'，weekdays为 '1234567'
 * target 新增的
 * origin 存在的
 */
export function checkPeriodExist(target = { startTime: '', endTime: '', weekdays: '' }, origin) {
  let isWeekdaysContained = false;
  let isTimeContained = false;
  if (isNotNull(target.weekdays) && isNotNull(origin.weekdays)) {
    // 存在周期
    target.weekdays.split('').forEach(d => {
      if (origin.weekdays.indexOf(d) >= 0) {
        isWeekdaysContained = true;
      }
    });
  }
  if (isWeekdaysContained) {
    // 周期存在交叉时，判断时间区间
    // 先改为数字
    const target_startTime = stringTimeToNumber(target.startTime);
    const target_endTime = stringTimeToNumber(target.endTime);
    const origin_startTime = stringTimeToNumber(origin.startTime);
    const origin_endTime = stringTimeToNumber(origin.endTime);
    if (
      (target_startTime >= origin_startTime && target_startTime < origin_endTime) ||
      (target_endTime > origin_startTime && target_endTime <= origin_endTime)
    ) {
      isTimeContained = true;
    }
  }
  return isTimeContained;
}

export function stringTimeToNumber(strTime) {
  let result = null;
  try {
    result = parseInt(strTime.replace(':', ''));
  } catch (e) {
    console.error('时间区间判断:::时间格式转换发生错误:::stringTimeToNumber()', e);
  }
  return result;
}

// 判断是否存在逗号, 存在以逗号分割成一个数组并且返回第二个数据, 否者直接返回该数据
export function isComma(o) {
  let index = o.indexOf(',');
  if (index > 0) {
    // 大于0 则存在
    let newArray = o.split(',');
    console.log('扫码返回的参数::', o);
    if (newArray.length === 3) {
      // 兼容 imei,rfid,iccid 方式
      return { type: 'rfIdAndiccId', data: newArray[2], imei: newArray[0] };
    } else {
      // 正常 imei和iccid
      return newArray[1].length <= 10
        ? { type: 'rfId', data: newArray[1], imei: newArray[0] }
        : { type: 'iccId', data: newArray[1], imei: newArray[0] };
    }
  } else if (index < 0) {
    // 只有imei
    return o;
  }
}

// 名字脱敏
export function nameConvert(name) {
  let userName = '';
  if (name.length == 2) {
    userName = name.substring(0, 1) + '*'; //截取name 字符串截取第一个字符，
  } else if (name.length == 3) {
    userName = name.substring(0, 1) + '*' + name.substring(2, 3); //截取第一个和第三个字符
  } else if (name.length > 3) {
    userName = name.substring(0, 1) + '*' + '*' + name.substring(3, name.length); //截取第一个和大于第4个字符
  }
  return userName;
}
