import { message } from 'ant-design-vue'

/**
 * utils Created by 邹英豪 on 2020-04-02
 */
const utils = {
	/**
	 * 用于处理 Java 接口返回的数据
	 * @param response {Object} 返回的数据对象
	 * @returns {boolean|*}
	 */
	requestResult: function(response) {
		if (response.code === '200') {
			return response.value || true
		} else {
			// 错误逻辑处理
			// 上面还可以添加 else if 管理code状态码的逻辑处理
			message.warning(response.message)
			return false
		}
	},

	/**
	 * 判断是否为空
	 * @param value
	 * @returns {Boolean}
	 */
	isEmpty: function(value) {
		return value == null || value == '' || value == undefined || value == 'null' || value == 'NULL' || value == 'NaN'
	},

	/**
	 * 用于格式化数据
	 * @param formatData {String | Number}
	 * @returns {string|*}
	 */
	isEffectiveCommon: function(formatData) {
		try {
            if (formatData === undefined || formatData == null || formatData === 'undefined' || formatData === '' || formatData.length === 0) {
                return '-'
            }
            return formatData
        } catch (e) {
			return '-'
		}
	},
	isEffectiveNumber: function(formatData) {
		try {
			if (formatData === undefined || formatData == null || formatData === 'undefined' || formatData === '' || formatData.length === 0) {
				return '0'
			}
			return formatData
		} catch (e) {
			return '-'
		}
	},

	/**
	 * 用于格式化数据
	 * @param formatData {String | Number}
	 * @returns {string|*}
	 */
	statisticalNoData: function(formatData) {
		try {
			if (formatData === undefined || formatData == null || formatData === 'undefined' || formatData === '') {
				return '无'
			}
			return formatData
		} catch (e) {
			return '无'
		}
	},

	/**
	 * 两个数组去重
	 * @param sourceArray {Array} 源数组
	 * @param aimsArray {Array} 目标数组
	 * @param sourceKey {String} 源数组比对的键值 key
	 * @param aimsKey {String} 目标数组比对的键值 key
	 * @returns {any[]}
	 */
	removeToolsCardArray: function(sourceArray, aimsArray, sourceKey, aimsKey) {
		let filterArray = []
		for (let aimeItem of aimsArray) {
			let flag = false
			for (let sourceItem of sourceArray) {
				if (sourceItem[sourceKey] === aimeItem[aimsKey]) {
					flag = true
					break
				}
			}
			if (!flag) {
				filterArray.push(aimeItem)
				continue
			}
		}
		return filterArray
	},

	/**
	 * 两个数组去重
	 * @param sourceArray {Array} 源数组
	 * @param aimsArray {Array} 目标数组
	 * @param sourceKey {String} 源数组比对的键值 key
	 * @param aimsKey {String} 目标数组比对的键值 key
	 * @returns {any[]}
	 */
	formatArray: function(sourceArray, aimsArray, sourceKey, aimsKey) {
		let filterArray = JSON.parse(JSON.stringify(sourceArray))
		for (let aimeItem of aimsArray) {
			let flag = false
			for (let sourceItem of sourceArray) {
				if (sourceItem[sourceKey] === aimeItem[aimsKey]) {
					flag = true
					break
				}
			}
			if (!flag) filterArray.push(aimeItem)
		}
		return filterArray
	},

	/**
	 * 时间格式化
	 * @param value
	 * @param fmt
	 * @returns {*}
	 */
	formatDate: function(value, fmt) {
		let regPos = /^\d+(\.\d+)?$/
		if (regPos.test(value)) {
			//如果是数字
			let getDate = new Date(value)
			let o = {
				'M+': getDate.getMonth() + 1,
				'd+': getDate.getDate(),
				'h+': getDate.getHours(),
				'm+': getDate.getMinutes(),
				's+': getDate.getSeconds(),
				'q+': Math.floor((getDate.getMonth() + 3) / 3),
				'S': getDate.getMilliseconds()
			}
			if (/(y+)/.test(fmt)) {
				fmt = fmt.replace(RegExp.$1, (getDate.getFullYear() + '').substr(4 - RegExp.$1.length))
			}
			for (let k in o) {
				if (new RegExp('(' + k + ')').test(fmt)) {
					fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)))
				}
			}
			return fmt
		} else {
			//TODO
			value = value.trim()
			return value.substr(0, fmt.length)
		}
	},

	formatDateTime: function(now, format = 'YYYY-MM-DD') {
		let time = new Date(now)
		let year = time.getFullYear()  //取得4位数的年份
		let month = this.addZero(time.getMonth() + 1)  //取得日期中的月份，其中0表示1月，11表示12月
		let date = this.addZero(time.getDate())      //返回日期月份中的天数（1到31）
		let hour = this.addZero(time.getHours())     //返回日期中的小时数（0到23）
		let minute = this.addZero(time.getMinutes()) //返回日期中的分钟数（0到59）
		let second = this.addZero(time.getSeconds()) //返回日期中的秒数（0到59）
		if (format === 'HH:mm') {
			return hour + ':' + minute
		} else {
			return year + '-' + month + '-' + date + ' ' + hour + ':' + minute + ':' + second
		}
	},
	addZero: function(num) {
		return num < 10 ? '0' + num : num
	},
  /**
 * 格式化时间
 * @param date
 * @param fmt
 * @returns {*}
 * @author Matrix <matrix.zyh@gmail.com>
 */
formatDateNow(date, fmt = 'yyyy-MM-dd hh:mm:ss') {
  if (typeof date !== 'object') {
    date = !date ? new Date() : new Date(date)
  }
  const o = {
    'M+': date.getMonth() + 1, // 月份
    'd+': date.getDate(), // 日
    'h+': date.getHours(), // 小时
    'm+': date.getMinutes(), // 分
    's+': date.getSeconds(), // 秒
    'q+': Math.floor((date.getMonth() + 3) / 3), // 季度
    S: date.getMilliseconds() // 毫秒
  }
  if (/(y+)/.test(fmt)) {
    fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
  }
  for (var k in o) {
    if (new RegExp('(' + k + ')').test(fmt)) {
      fmt = fmt.replace(RegExp.$1, RegExp.$1.length === 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length))
    }
  }
  return fmt
},

	/**
	 * 日期转换时间戳。例如：2020-05-14 11:37:11 ---> 1589427431000
	 * @param date { String } [日期 例如：2020-05-14 11:37:11]
	 * @returns { number } [时间戳]
	 */
	dateChangeTimestamp: function(date) {
		// return new Date(date.replace(/-/g, '/')).getTime()
		return new Date(date).getTime()
	},

	/**
	 * 格式化秒
	 * @param int  timestamp 总秒数
	 * @return string result 格式化后的字符串
	 */
	formatSeconds: function(timestamp) {
		const H = parseInt(timestamp / 1000 / 60 / 60 % 24)
		const M = parseInt(timestamp / 1000 / 60 % 60)
		const S = parseInt(timestamp / 1000 % 60)
		return `${H}时${M}分${S}秒`
	},

	/**
	 * 截取日期字符串
	 * @param times { String } [ 日期格式，如：2020-05-21 13:14:00 ]
	 * @returns {string}
	 */
	interceptDateTime: function(times, format = '') {
		// YYYY-MM-DD HH:mm:ss
		let timeArr = times.replace(' ', ':').replace(/\:/g, '-').split('-')
		let timeStr = ''
		switch (format) {
			case 'YYYY-MM-DD':
				timeStr = timeArr[0] + '-' + timeArr[1] + '-' + timeArr[2]
				break
			case 'YYYY-MM':
				timeStr = timeArr[0] + '-' + timeArr[1]
				break
			case 'MM-DD':
				timeStr = timeArr[1] + '-' + timeArr[2]
				break
			case 'YYYY':
				timeStr = timeArr[0]
				break
			case 'MM':
				timeStr = timeArr[1]
				break
			case 'DD':
				timeStr = timeArr[2]
				break
			case 'HH:mm:ss':
				timeStr = timeArr[3] + ':' + timeArr[4] + ':' + timeArr[5]
				break
			case 'HH:mm':
				timeStr = timeArr[3] + ':' + timeArr[4]
				break
			case 'mm:ss':
				timeStr = timeArr[4] + ':' + timeArr[5]
				break
			case 'HH':
				timeStr = timeArr[3]
				break
			case 'mm':
				timeStr = timeArr[4]
				break
			case 'ss':
				timeStr = timeArr[5]
				break
			default:
				break
		}
		return timeStr
	},

	/**
	 * 递归 深拷贝
	 * @param data: 拷贝的数据
	 * @returns {{}|*}
	 * @author 邹英豪 <zouyh@sspss.com.cn>
	 * @createBy 2020-07-09
	 */
	cloneDeep: function(data) {
		const type = Object.prototype.toString.call(data).slice(8, -1)
		let o
		if (type === 'Array') {
			o = []
		} else if (type === 'Object') {
			o = {}
		} else {
			return data
		}

		if (type === 'Array') {
			for (let i = 0; i < data.length; i++) {
				o.push(JSON.parse(JSON.stringify(data[i])))
			}
		} else if (type === 'Object') {
			for (let i in data) {
				o[i] = JSON.parse(JSON.stringify(data[i]))
			}
		}
		return o
	},

	/**
	 * 判断是否是图片
	 * @param url
	 */
	isImage: function(url) {
		if (!/\.(gif|jpg|jpeg|png|GIF|JPG|PNG)$/.test(url)) {
			return false
		}
		return true
	},

	/**
	 * 判断是否可以预览
	 * @param url
	 */
	isPreview: function(url) {
		if (!/\.(jpg|jpeg|png|doc|docx|xls|xlsx|txt|pdf|ppt|sql|ppt|pptx)$/.test(url)) {
			return false
		}
		return true
	},

	/**
	 * @description 获取 URL 中参数
	 * @param url { String } [地址栏中 url]
	 * @author 邹英豪 <zouyh@sspss.com.cn>
	 * @createBy 2020-09-14
	 * @returns {{}|any}
	 */
	getParams: function(url) {
		const search = url.split('?')[1];
		if (!search) {
			return {};
		}
		return JSON.parse(
			'{"' +
			decodeURIComponent(search)
				.replace(/"/g, '\\"')
				.replace(/&/g, '","')
				.replace(/=/g, '":"')
				.replace(/\+/g, ' ') +
			'"}'
		);
	},

	getMenuList: function() {
		return ['生产管理', '巡检管理', '物资管理', '系统管理']
	},

	/**
	 * 去除对象型数组中的重复项
	 * @returns {[]}
	 */
	delRepeatObject: function(array) {
		let uniques = [];
		let stringify = {};
		for (let i = 0; i < array.length; i++) {
			let keys = Object.keys(array[i]);
			keys.sort(function(a, b) {
				return (Number(a) - Number(b));
			});
			let str = '';
			for (let j = 0; j < keys.length; j++) {
				str += JSON.stringify(keys[j]);
				str += JSON.stringify(array[i][keys[j]]);
			}
			if (!stringify.hasOwnProperty(str)) {
				uniques.push(array[i]);
				stringify[str] = true;
			}
		}
		uniques = uniques;
		return uniques;
	},

	/**
	 * base64 图片转码文件流
	 * @param {String} dataurl base64
	 * @param {String} filename 文件类型
	 * @returns {File}
	 */
	base64toFile: function (dataurl, filename = 'file') {
		let arr = dataurl.split(',')
		let mime = arr[0].match(/:(.*?);/)[1]
		let suffix = mime.split('/')[1]
		let bstr = atob(arr[1])
		let n = bstr.length
		let u8arr = new Uint8Array(n)
		while (n--) {
			u8arr[n] = bstr.charCodeAt(n)
		}
		return new File([u8arr], `${filename}.${suffix}`, {
			type: mime
		})
	},

	/**
	 * 根据日期转换星期
	 * @param {String} date 日期[YYYY-MM-DD HH:mm:ss]
	 * @returns {File}
	 */
	dateWeek: function(date) {
		const day = new Date(date).getDay()
		switch (day) {
			case 1: return '一';
			case 2: return '二';
			case 3: return '三';
			case 4: return '四';
			case 5: return '五';
			case 6: return '六';
			default: return '日'
		}
	},

	/**
	 * 阿拉伯数字转中文大写数字
	 * @param {Number} num 阿拉伯数字
	 * @returns {string}
	 * @author Matrix <matrix.zyh@gmail.com>
	 */
	numberToChinese: function (num) {
		// eslint-disable-next-line no-array-constructor
		const AA = new Array('零', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十')
		// eslint-disable-next-line no-array-constructor
		const BB = new Array('', '十', '百', '仟', '萬', '億', '点', '')
		const a = ('' + num).replace(/(^0*)/g, '').split('.')
		let k = 0
		let re = ''
		for (let i = a[0].length - 1; i >= 0; i--) {
			switch (k) {
				case 0:
					re = BB[7] + re
					break
				case 4:
					if (!new RegExp('0{4}//d{' + (a[0].length - i - 1) + '}$').test(a[0])) {
						re = BB[4] + re
					}
					break
				case 8:
					re = BB[5] + re
					BB[7] = BB[5]
					k = 0
					break
			}
			if (k % 4 === 2 && a[0].charAt(i + 2) !== 0 && a[0].charAt(i + 1) === 0) {
				re = AA[0] + re
			}
			if (a[0].charAt(i) !== 0) {
				re = AA[a[0].charAt(i)] + BB[k % 4] + re
			}
			k++
		}
		if (a.length > 1) {
			// 加上小数部分(如果有小数部分)
			re += BB[6]
			for (let i = 0; i < a[1].length; i++) {
				re += AA[a[1].charAt(i)]
			}
		}
		if (re === '一十') {
			re = '十'
		}
		if (re.match(/^一/) && re.length === 3) {
			re = re.replace('一', '')
		}
		return re
	}

}


export default utils
