import copy from 'copy-to-clipboard';
import { message } from 'antd';
/*
* Purpose：    获取session数据
* Params：     参数
	type [string] 需要获取的session
	isParse [bool] 是否将字符串转为对象
* */
export const getSessionData = function (key = 'userData', isParse = true) {
	try {
		if (key && window.sessionStorage && key in window.sessionStorage && window.sessionStorage[key]) {
			let sessionData = window.sessionStorage.getItem(key);
			return isParse ? JSON.parse(sessionData) : sessionData;
		}
		return isParse ? {} : '';
	} catch (e) {
		return isParse ? {} : '';
	}
}

// 修改session数据，参数如上
export const setSessionData = function (key = 'userData', values, isStringify = true) {
	if (window.sessionStorage && window.sessionStorage.setItem) {
		window.sessionStorage.setItem(key, isStringify ? JSON.stringify(values) : values);
	}
}

// 删除session数据，参数如上
export const removeSessionData = function (key) {
	if (key && window.sessionStorage && window.sessionStorage[key]) {
		window.sessionStorage.removeItem(key);
	}
}

/*
* Purpose：    获取localStorage数据
* Params：     参数
	type [string] 需要获取的localStorage
	isParse [bool] 是否将字符串转为对象
* */
export const getLocalStorageData = function (key, isParse = true) {
	try {
		if (key && window.localStorage && key in window.localStorage && window.localStorage[key]) {
			let sessionData = window.localStorage.getItem(key);
			return isParse ? JSON.parse(sessionData) : sessionData;
		}
		return isParse ? {} : '';
	} catch (e) {
		return isParse ? {} : '';
	}
}

// 修改localStorage数据，参数如上
export const setLocalStorageData = function (key, values, isStringify = true) {
	if (window.localStorage && window.localStorage.setItem) {
		window.localStorage.setItem(key, isStringify ? JSON.stringify(values) : values);
	}
}

// 删除localStorage数据，参数如上
export const removeLocalStorageData = function (key) {
	if (key && window.localStorage && window.localStorage[key]) {
		window.localStorage.removeItem(key);
	}
}

/*
	* Purpose：    获取菜单扁平化后的数据
	* Params：     参数
		resultType [string] 返回类型
		dataIndex [string] 匹配字段
		value [string] 数据对应的值
		data [array] 数据源
	* */
export const getFlowData = function (data, arrIndex = 'children') {
	let menusData = [];
	function flow(data) {
		for (var i = 0; i < data.length; i++) {
			menusData.push(data[i]);
			if (data[i] && data[i][arrIndex] && data[i][arrIndex].length > 0) {
				flow(data[i][arrIndex])
			}
		}
	}
	flow(data);
	return menusData;
}

/*
	* Purpose：    将对象中的value值转换为字符串
	* Params：     参数
		dataSource [数组/对象] 数据源
		resultType [字符串/数字] 返回类型
	* */
export const dataConversion = function (dataSource, resultType = 'string') {
	if (Object.prototype.toString.call(dataSource) === '[object Object]') { // 对象
		for (var keys in dataSource) {
			if (typeof (dataSource[keys]) !== resultType) {
				dataSource[keys] = resultType === 'number' ? Number(dataSource[keys]) : String(dataSource[keys]);
			}
		}
	} else if (Object.prototype.toString.call(dataSource) === '[object Array]') { // 数组
		for (var i = 0; i < dataSource.length; i++) {
			if (Object.prototype.toString.call(dataSource[i]) === '[object Object]') {
				for (var keys in dataSource[i]) {
					if (typeof (dataSource[i][keys]) !== resultType) {
						dataSource[i][keys] = resultType === 'number' ? Number(dataSource[i][keys]) : String(dataSource[i][keys]);
					}
				}
			}
		}
	}
	return dataSource;
}

/*
	* Purpose：    阻止默认事件
	* Params：     参数
		e [event] event对象
	* */
export const stopPropagation = (e) => {
	e && Object.prototype.toString.call(e) === '[object Object]' && 'stopPropagation' in e && e.stopPropagation && e.stopPropagation();
}

/*
	* Purpose：    阻止事件冒泡
	* Params：     参数
		e [event] event对象
	* */
export const preventDefault = (e) => {
	if (e && e.preventDefault) {
		e.preventDefault();
	} else {
		e.returnValue = false;
	}
}

/*
	* Purpose：    将字符串转换成大写
	* Params：     参数
		uppercaseStr [string] 字符串数据源
		num [number] 需要转换字符串中的前num个字符 
	* */
export const toUpperCase = (uppercaseStr, num) => {
	if (uppercaseStr && typeof (uppercaseStr) === 'string') {
		if (num) {
			uppercaseStr = uppercaseStr.slice(0, num);
		}
		return uppercaseStr.toUpperCase();
	} else {
		return uppercaseStr;
	}
}

/*
	* Purpose：    将字符串转换成小写
	* Params：     参数
		uppercaseStr [string] 字符串数据源
		num [number] 需要转换字符串中的前num个字符 
	* */
export const toLowerCase = (uppercaseStr, num) => {
	if (uppercaseStr && typeof (uppercaseStr) === 'string') {
		if (num) {
			uppercaseStr = uppercaseStr.slice(0, num);
		}
		return uppercaseStr.toLowerCase();
	} else {
		return uppercaseStr;
	}
}

/*
	* Purpose：    复制到粘贴板
	* Params：     参数
		content [string] - 必传 需要复制的内容
		messageText [string] 提示文字
		isMessage [string] 提示内容
	* */
export const copyToClipboard = function (content, messageText, isMessage) {
	if (content) {
		copy(content);
		isMessage !== 'N' ? message.success(messageText || '复制成功') : '';
	} else {
		message.error('传入内容为空，复制到粘贴板失败！')
	}
}

/*
	* Purpose：    判断是否为JSON串
	* Params：     参数
		str [string] - 必传
	* */
export const isJsonString = function (str) {
	try {
		JSON.parse(str);
		return true;
	} catch (e) {
		return false;
	}
}