import { mobileReg } from '@/utils/tools/validate'
// 是否为空
const isEmpty = (val) => {
	if (val instanceof Array) {
		if (val.length === 0) return true
	} else if (val instanceof Object) {
		if (!Object.keys(val).length) return true
	} else {
		if (val === 'null' || val === null || val === 'undefined' || val === undefined || val === '') return true
		return false
	}
	return false
}

// 是否为数组
const isArray = (arr) => {
	return (typeof arr == 'object') && arr.constructor == Array
}

// 是否为字符串
const isString = (str) => {
	return (typeof str == 'string') && str.constructor == String
}

// 是否为对象
const isObject = (obj) => {
	return (typeof obj == 'object') && obj.constructor == Object
}

// 是否为数字
const isNumber = (num) => {
	return (typeof num == 'number') && num.constructor == Number
}

// 是否为日期类型
const isDate = (date) => {
	return (typeof date == 'object') && date.constructor == Date
}

// 是否为函数
const isFunction = (obj) => {
	return (typeof obj == 'object') && obj.constructor == Function
}

// 对象参数转为url参数
const parse = (query) => {
	return Object.keys(query)
		.filter(key => !isEmpty(query[key]))
		.reduce((result, key) => {
			const value = query[key]
			// in查询特殊处理
			if (Array.isArray(value) && !isEmpty(value)) {
				return `${result}&${value.reduce((val, cVal) => `${val ? `${val}&` : val}${key}=${cVal}`, '')}`
			}

			// between查询做特殊处理
			if (typeof value === 'object' && !isEmpty(value)) {
				const [start, end] = value
				return `${result}&${key}[]=${start}&${key}[]=${end}`
			}

			return `${result}&${key}=${value}`
		}, '')
		.replace(/^&/, '?')
}

const $checkMobile = (num) => {
	return mobileReg.test(num)
}
const $checkName = (str) => {
	return /^[\u4E00-\u9FA5A-Za-z\s]+(·[\u4E00-\u9FA5A-Za-z]+)*$/.test(str)
}

export const $formatDate = (num, fmt = 'YYYY-MM-DD HH:mm:ss') => {
	let date = new Date()
	date.setTime(num)
	let o = {
		'M+': date.getMonth() + 1,
		'D+': date.getDate(),
		'h+': date.getHours() % 12 === 0 ? 12 : date.getHours() % 12,
		'H+': date.getHours(),
		'm+': date.getMinutes(),
		's+': date.getSeconds(),
		'q+': Math.floor((date.getMonth() + 3) / 3),
		'S': date.getMilliseconds()
	}
	let week = {
		'0': '\u65e5',
		'1': '\u4e00',
		'2': '\u4e8c',
		'3': '\u4e09',
		'4': '\u56db',
		'5': '\u4e94',
		'6': '\u516d'
	}
	if (/(Y+)/.test(fmt)) {
		fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
	}
	if (/(E+)/.test(fmt)) {
		fmt = fmt.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? '\u661f\u671f' : '\u5468') : '') + week[date.getDay() + ''])
	}
	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
}

/** *
 * 全局公共按钮跳转
 * @parmas item.funtion 为可执行函数
 * @parmas item.url 为跳转的路径
 * @parmas item.query 为跳转携带的参数
 * @parmas item.type 为跳转调用的函数 1为navigateTo, 2为redirectTo, 3为reLaunch
 */
export const pageTo = (item) => {
	if (isString(item)) {
		uni.navigateTo({
			url: item
		})
		return false
	}
	if (item.funtion) {
		item.funtion()
	}
	if (item.url) {
		let query = query ? parse(item.query) : ''
		let allUrl = `${item.url}${query}`
		if (item.type == 2) {
			uni.redirectTo({
				url: allUrl
			})
		} else if (item.type == 3) {
			uni.reLaunch({
				url: allUrl
			})
		} else {
			uni.navigateTo({
				url: allUrl
			})
		}
	}
}
/** *
 * 是否登录
 */
export const isLogin = () => {
	let token = uni.getStorageSync('token')
	if (token) {
		return true
	}
	return false
}
export default {
	isEmpty,
	parse,
	$checkMobile,
	$checkName,
	$formatDate,
	pageTo,
	isLogin
}
