import CONSTANT from '@/constant'
import { mobileReg } from '@/utils/tools/validate'
import { getMiniAppUrl, isWxBrowser } from '@/utils/common'
// 是否为空
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 imgSubstr = (val) => {
	if (isEmpty(val)) return []
	if (isArray(val)) {
		return val.map(e => {
			let index = e.indexOf('/uploads/')
			e = e.substring(index)
			return e
		})
	} else {
		let index = val.indexOf('/uploads/')
		return val.substring(index)
	}
}

// 是否为数组
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
}

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

/** *
 * 检查登录
 * @parmas query 拼接得参数对象
 * @parmas isFrist 为true时开头为&
 */
export async function getCheckLogin() {
	let status = false
	let token = uni.getStorageSync('token')
	if (token) {
		status = true
	} else {
		// #ifdef H5
		if (isWxBrowser()) {
			let option = JSON.parse(uni.getStorageSync('currentQuery')) || {}
			console.log('option', option)
			// console.log('option', getMiniAppUrl(option, true))
			// return false
			location.href = `${CONSTANT.hostUrl}/auth/prepare?url=${encodeURIComponent(getMiniAppUrl(option, true))}`
		} else {
			// uni.showToast({
			// 	title: '请用微信浏览器打开！',
			// 	icon: 'none',
			// 	mask: true
			// })
		}
		// #endif
		// #ifndef H5
		// #endif
	}
	return status
}

/** *
 * 对象参数转为url参数
 * @parmas query 拼接得参数对象
 * @parmas isFrist 为true时开头为&
 */
export const parse = (query, isFrist = false) => {
	let str = 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}`
		}, '')
	return isFrist ? str : str.replace(/^&/, '?')
}

/** *
 * 全局时间转换
 * @parmas num 时间戳默认为11位时间戳
 * @parmas fmt 默认转换的时间格式
 * @parmas all 为true时time为13位时间戳
 */
export const $formatDate = (num, fmt = 'YYYY-MM-DD HH:mm', all) => {
	num = all ? num : num * 1000
	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, 4为switchTab
 */
export const pageTo = (item) => {
	console.log('item', item)
	if (isNumber(item)) {
		uni.navigateBack({
			delta: item
		})
	}
	if (isString(item)) {
		uni.navigateTo({
			url: item
		})
		return false
	}
	if (item.funtion) {
		item.funtion()
	}
	if (item.url) {
		let query = item.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 if (item.type == 4) {
			uni.switchTab({
				url: allUrl
			})
		} else {
			uni.navigateTo({
				url: allUrl
			})
		}
	}
}
/** *
 * 是否登录
 */
export const isLogin = () => {
	let token = uni.getStorageSync('token')
	if (token) {
		return true
	}
	return false
}
export default {
	isEmpty,
	imgSubstr,
	parse,
	checkMobile,
	checkName,
	$formatDate,
	pageTo,
	isLogin,
	getCheckLogin
}
