/**
 * 通用js方法封装处理
 * Copyright (c) 2019 ruoyi
 */
import TIM from 'tim-js-sdk/tim-js-friendship'
import axios from 'axios'
import { Message } from 'element-ui'
import { getToken } from '@/utils/auth'


export function translateGroupSystemNotice(message) {
	const groupName = message.payload.groupProfile.name || message.payload.groupProfile.groupID
	switch (message.payload.operationType) {
	  case 1:
		return `${message.payload.operatorID} 申请加入群组：${groupName}`
	  case 2:
		return `成功加入群组：${groupName}`
	  case 3:
		return `申请加入群组：${groupName}被拒绝`
	  case 4:
		return `你被管理员${message.payload.operatorID}踢出群组：${groupName}`
	  case 5:
		return `群：${groupName} 已被${message.payload.operatorID}解散`
	  case 6:
		return `${message.payload.operatorID}创建群：${groupName}`
	  case 7:
		return `${message.payload.operatorID}邀请你加群：${groupName}`
	  case 8:
		return `你退出群组：${groupName}`
	  case 9:
		return `你被${message.payload.operatorID}设置为群：${groupName}的管理员`
	  case 10:
		return `你被${message.payload.operatorID}撤销群：${groupName}的管理员身份`
	  case 12:
		return `${message.payload.operatorID}邀请你加群：${groupName}`
	  case 13:
		return `${message.payload.operatorID}同意加群：${groupName}`
	  case 14:
		return `${message.payload.operatorID}拒接加群：${groupName}`
	  case 255:
		return '自定义群系统通知: ' + message.payload.userDefinedField
	}
  }
  
  export const errorMap = {
	500: '服务器错误',
	602: '用户名或密码不合法',
	610: '用户名格式错误',
	612: '用户已存在',
	620: '用户不存在',
	621: '密码错误'
  }
  export function filterCallingMessage(currentMessageList) {
	currentMessageList.forEach((item) => {
	  if (item.callType) {   // 对于自己伪造的消息不需要解析
		return
	  }
	  if (item.type === TIM.TYPES.MSG_MERGER && item.payload.downloadKey !== '') {
		let promise = window.tim.downloadMergerMessage(item)
		promise.then(function(imResponse) {
		  // 下载成功后，SDK会更新 message.payload.messageList 等信息
		  item = imResponse
		}).catch(function(imError) {
		  // 下载失败
		  console.warn('downloadMergerMessage error:', imError)
		})
	  }
	  if(item.type === TIM.TYPES.MSG_CUSTOM) {
		let payloadData = {}
		try {
		  payloadData = JSON.parse(item.payload.data)
		}catch (e) {
		  payloadData = {}
		}
		if(payloadData.businessID === 1) {
		  if(item.conversationType === TIM.TYPES.CONV_GROUP) {
			if(payloadData.actionType === 5) {
			  item.nick = payloadData.inviteeList ? payloadData.inviteeList.join(','):item.from
			}
			let _text = window.trtcCalling.extractCallingInfoFromMessage(item)
			let group_text = `${_text}`
			item.type = TIM.TYPES.MSG_GRP_TIP
			let customData = {
			  operationType: 256,
			  text: group_text,
			  userIDList: []
			}
			item.payload = customData//JSON.stringify(customData)
		  }
		  if(item.conversationType === TIM.TYPES.CONV_C2C) {
			let c2c_text = window.trtcCalling.extractCallingInfoFromMessage(item)
			let customData = {
			  text: c2c_text
			}
			item.payload = customData//JSON.stringify(customData)
		  }
		}
	  }
  
	})
  }
  
  


const baseURL = process.env.VUE_APP_BASE_API

// 日期格式化
export function parseTime(time, pattern) {
	if (arguments.length === 0 || !time) {
		return null
	}
	const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}'
	let date
	if (typeof time === 'object') {
		date = time
	} else {
		if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {
			time = parseInt(time)
		} else if (typeof time === 'string') {
			time = time.replace(new RegExp(/-/gm), '/').replace('T', ' ').replace(new RegExp(/\.[\d]{3}/gm),'');
		}
		if ((typeof time === 'number') && (time.toString().length === 10)) {
			time = time * 1000
		}
		date = new Date(time)
	}
	const formatObj = {
		y: date.getFullYear(),
		m: date.getMonth() + 1,
		d: date.getDate(),
		h: date.getHours(),
		i: date.getMinutes(),
		s: date.getSeconds(),
		a: date.getDay()
	}
	const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
		let value = formatObj[key]
		// Note: getDay() returns 0 on Sunday
		if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value] }
		if (result.length > 0 && value < 10) {
			value = '0' + value
		}
		return value || 0
	})
	return time_str
}

export function cloneObject(obj) {
	if (typeof obj != "object") return;
	return JSON.parse(JSON.stringify(obj));
}
 
// 表单重置
export function resetForm(refName) {
	if (this.$refs[refName]) {
		this.$refs[refName].resetFields();
	}
}

// 添加日期范围
export function addDateRange(params, dateRange, propName) {
	let search = params;
	search.params = typeof (search.params) === 'object' && search.params !== null && !Array.isArray(search.params) ? search.params : {};
	dateRange = Array.isArray(dateRange) ? dateRange : [];
	if (typeof (propName) === 'undefined') {
		search.params['beginTime'] = dateRange[0];
		search.params['endTime'] = dateRange[1];
	} else {
		search.params['begin' + propName] = dateRange[0];
		search.params['end' + propName] = dateRange[1];
	}
	return search;
}

// 回显数据字典
export function selectDictLabel(datas, value) {
	var actions = [];
	Object.keys(datas).some((key) => {
		if (datas[key].dictValue == ('' + value)) {
			actions.push(datas[key].dictLabel);
			return true;
		}
	})
	return actions.join('');
}

// 回显数据字典（字符串数组）
export function selectDictLabels(datas, value, separator) {
	var actions = [];
	var currentSeparator = undefined === separator ? "," : separator;
	var temp = value.split(currentSeparator);
	Object.keys(value.split(currentSeparator)).some((val) => {
		Object.keys(datas).some((key) => {
			if (datas[key].dictValue == ('' + temp[val])) {
				actions.push(datas[key].dictLabel + currentSeparator);
			}
		})
	})
	return actions.join('').substring(0, actions.join('').length - 1);
}

// 通用下载方法（须携带 Token；window.location 无法带 Authorization，鉴权后会 401）
export function download(fileName) {
	axios({
		method: 'get',
		url: baseURL + '/common/download?fileName=' + encodeURIComponent(fileName) + '&delete=' + true,
		responseType: 'blob',
		headers: { 'Authorization': 'Bearer ' + getToken() }
	}).then(async (res) => {
		const data = res.data
		if (data.type && data.type.indexOf('application/json') !== -1) {
			const text = await data.text()
			try {
				const rsp = JSON.parse(text)
				Message.error(rsp.msg || '下载失败')
			} catch (e) {
				Message.error('下载失败')
			}
			return
		}
		const blob = new Blob([data])
		const aLink = document.createElement('a')
		const name = decodeURIComponent(fileName)
		aLink.href = URL.createObjectURL(blob)
		aLink.setAttribute('download', name)
		document.body.appendChild(aLink)
		aLink.click()
		document.body.removeChild(aLink)
		URL.revokeObjectURL(aLink.href)
	}).catch(() => {
		Message.error('下载失败，请重新登录后重试')
	})
}

// 字符串格式化(%s )
export function sprintf(str) {
	var args = arguments, flag = true, i = 1;
	str = str.replace(/%s/g, function () {
		var arg = args[i++];
		if (typeof arg === 'undefined') {
			flag = false;
			return '';
		}
		return arg;
	});
	return flag ? str : '';
}

// 转换字符串，undefined,null等转化为""
export function praseStrEmpty(str) {
	if (!str || str == "undefined" || str == "null") {
		return "";
	}
	return str;
}
/**
 * 构造树型结构数据
 * @param {*} data 数据源
 * @param {*} id id字段 默认 'id'
 * @param {*} parentId 父节点字段 默认 'parentId'
 * @param {*} children 孩子节点字段 默认 'children'
 * @param {*} rootId 根Id 默认 0
 */
export function handleTree(data, id, parentId, children, rootId) {
	id = id || 'id'
	parentId = parentId || 'parentId'
	children = children || 'children'
	rootId = rootId || Math.min.apply(Math, data.map(item => { return item[parentId] })) || 0
	//对源数据深度克隆
	const cloneData = JSON.parse(JSON.stringify(data))
	//循环所有项
	const treeData = cloneData.filter(father => {
		let branchArr = cloneData.filter(child => {
			//返回每一项的子级数组
			return father[id] === child[parentId]
		});
		branchArr.length > 0 ? father.children = branchArr : '';
		//返回第一层
		return father[parentId] === rootId;
	});
	return treeData != '' ? treeData : data;
}
// /**
//  * 构造树型结构数据
//  * @param {*} data 数据源
//  * @param {*} id id字段 默认 'id'
//  * @param {*} parentId 父节点字段 默认 'parentId'
//  * @param {*} children 孩子节点字段 默认 'children'
//  */
// export function handleTree(data, id, parentId, children) {
// 	let config = {
// 		id: id || 'id',
// 		parentId: parentId || 'parentId',
// 		childrenList: children || 'children'
// 	};

// 	var childrenListMap = {};
// 	var nodeIds = {};
// 	var tree = [];

// 	for (let d of data) {
// 		let parentId = d[config.parentId];
// 		if (childrenListMap[parentId] == null) {
// 			childrenListMap[parentId] = [];
// 		}
// 		nodeIds[d[config.id]] = d;
// 		childrenListMap[parentId].push(d);
// 	}

// 	for (let d of data) {
// 		let parentId = d[config.parentId];
// 		if (nodeIds[parentId] == null) {
// 			tree.push(d);
// 		}
// 	}

// 	for (let t of tree) {
// 		adaptToChildrenList(t);
// 	}

// 	function adaptToChildrenList(o) {
// 		if (childrenListMap[o[config.id]] !== null) {
// 			o[config.childrenList] = childrenListMap[o[config.id]];
// 		}
// 		if (o[config.childrenList]) {
// 			for (let c of o[config.childrenList]) {
// 				adaptToChildrenList(c);
// 			}
// 		}
// 	}
// 	return tree;
// }
