/**
 * 企业微信JS-SDK调用
 */
let WxWork = function () {
	// 企业微信JS-SDK
	this.wxwork = null;

	/**
	 * 初始化企业微信JS-SDK
	 * @param {Object} params - 初始化参数
	 * @param {string} params.corpId - 企业ID
	 * @param {string} params.agentId - 应用ID
	 * @param {string} params.timestamp - 时间戳
	 * @param {string} params.nonceStr - 随机字符串
	 * @param {string} params.signature - 签名
	 * @param {Array} params.jsApiList - 需要使用的JS接口列表
	 */
	this.init = function (params) {
		if (typeof wx !== 'undefined' && wx.config) {
			// 小程序环境下的企业微信
			this.wxwork = wx;
		} else if (typeof WWOpenData !== 'undefined') {
			// H5环境下的企业微信
			this.wxwork = WWOpenData;
		} else {
			console.error('企业微信JS-SDK未加载');
			return false;
		}

		this.wxwork.config({
			beta: true, // 必须这么写，否则wx.invoke调用形式的jsapi会有问题
			debug: false, // 开启调试模式
			corpId: params.corpId, // 必填，企业号的唯一标识
			agentId: params.agentId, // 必填，企业微信应用ID
			timestamp: params.timestamp, // 必填，生成签名的时间戳
			nonceStr: params.nonceStr, // 必填，生成签名的随机串
			signature: params.signature, // 必填，签名
			jsApiList: params.jsApiList || [
				'openUserProfile',
				'openEnterpriseChat',
				'getContext',
				'getCurExternalContact',
				'openExistedChatWithMsg'
			] // 必填，需要使用的JS接口列表
		});

		return true;
	};

	/**
	 * 添加企业微信联系人
	 * @param {Object} params - 参数
	 * @param {string} params.userId - 用户ID
	 * @param {Function} success - 成功回调
	 * @param {Function} fail - 失败回调
	 */
	this.addContact = function (params, success, fail) {
		if (!this.wxwork) {
			console.error('企业微信JS-SDK未初始化');
			if (fail) fail('企业微信JS-SDK未初始化');
			return;
		}

		this.wxwork.ready(() => {
			this.wxwork.invoke('openUserProfile', {
				type: 'external', // 外部联系人
				userId: params.userId // 用户ID
			}, (res) => {
				if (res.err_msg === 'openUserProfile:ok') {
					if (success) success(res);
				} else {
					console.error('打开用户资料失败:', res);
					if (fail) fail(res.err_msg);
				}
			});
		});
	};

	/**
	 * 打开企业微信客服会话
	 * @param {Object} params - 参数
	 * @param {string} params.corpId - 企业ID
	 * @param {string} params.url - 客服URL
	 * @param {string} params.name - 会话名称
	 * @param {Function} success - 成功回调
	 * @param {Function} fail - 失败回调
	 */
	this.openCustomerService = function (params, success, fail) {
		if (!this.wxwork) {
			console.error('企业微信JS-SDK未初始化');
			if (fail) fail('企业微信JS-SDK未初始化');
			return;
		}

		this.wxwork.ready(() => {
			// #ifdef MP-WEIXIN
			if (typeof wx !== 'undefined' && wx.openCustomerServiceChat) {
				// 微信小程序环境
				wx.openCustomerServiceChat({
					extInfo: {
						url: params.url
					},
					corpId: params.corpId,
					showMessageCard: true,
					sendMessageTitle: params.sendMessageTitle || '',
					sendMessagePath: params.sendMessagePath || '',
					sendMessageImg: params.sendMessageImg || ''
				});
				if (success) success();
			}
			// #endif
			// #ifdef H5
			else if (typeof WWOpenData !== 'undefined') {
				// H5环境
				window.location.href = params.url;
				if (success) success();
			}
			// #endif
			else {
				// 直接跳转链接
				window.location.href = params.url;
				if (success) success();
			}
		});
	};

	/**
	 * 生成企业微信活码链接
	 * @param {Object} params - 参数
	 * @param {string} params.configId - 活码配置ID
	 * @param {string} params.userId - 用户ID
	 * @returns {string} 活码链接
	 */
	this.generateContactUrl = function (params) {
		// 企业微信活码链接格式
		const baseUrl = 'https://work.weixin.qq.com/kfid';
		if (params.configId) {
			return `${baseUrl}/${params.configId}`;
		}
		return null;
	};

	/**
	 * 检查环境是否支持企业微信
	 * @returns {boolean} 是否支持
	 */
	this.isSupported = function () {
		// #ifdef MP-WEIXIN
		return typeof wx !== 'undefined' && wx.openCustomerServiceChat;
		// #endif
		// #ifdef H5
		return typeof WWOpenData !== 'undefined' || /wxwork/i.test(navigator.userAgent);
		// #endif
		return false;
	};

	/**
	 * 获取当前环境信息
	 * @returns {Object} 环境信息
	 */
	this.getEnvironment = function () {
		// #ifdef MP-WEIXIN
		return {
			platform: 'miniprogram',
			isWxWork: false,
			supportContact: typeof wx !== 'undefined' && wx.openCustomerServiceChat
		};
		// #endif
		// #ifdef H5
		const isWxWork = /wxwork/i.test(navigator.userAgent);
		return {
			platform: 'h5',
			isWxWork: isWxWork,
			supportContact: isWxWork || typeof WWOpenData !== 'undefined'
		};
		// #endif
		return {
			platform: 'unknown',
			isWxWork: false,
			supportContact: false
		};
	};
}

export {
	WxWork
}