// 引用方式
var jpushModule = uni.requireNativePlugin("JG-JPush");
// console.log('【sk】【引用方式】【jpushModule】【requireNativePlugin】')

// 开启 debug 模式，默认是关闭
function openDebug() {
	jpushModule.setLoggerEnable(true);
}

// 关闭 debug 模式，默认是关闭
function closeDebug() {
	jpushModule.setLoggerEnable(false);
}

// 获取 RegistrationID，只有当应用程序成功注册到 JPush 的服务器时才返回对应的值，否则返回空字符串
function getRegistrationID(skBack) {
	jpushModule.getRegistrationID(result => {
		// code number  状态码 0 - 成功， 1011 - iOS模拟器调用会报此错误
		// registerID   string  返回的 registrationID
		console.log('【sk】获取 RegistrationID=>', result)
		skBack(result.registerID)
	})
}

// 跳转至系统设置页面，0 - 成功 1 - 失败
function openSettingsForNotification() {
	jpushModule.openSettingsForNotification((result) => {
		// code number  0 - 成功 1 - 失败
		console.log('【sk】跳转至系统设置页面result=>', result.code)
	})
}

// 初始化SDK iOS 说明:如果在mainfest.json里 将JPUSH_DEFAULTINITJPUSH_IOS值配置为"true"，插件内部将默认初始化JPush，用户则不需要调用该初始化方法。
function initJPushService() {
	console.log(jpushModule)
	jpushModule.initJPushService()
}

// 连接状态回调，true - 已连接, false - 未连接
function addConnectEventListener(skBack) {
	jpushModule.addConnectEventListener(result => {
		// connectEnable    boolean true - 已连接, false - 未连接
		console.log('【sk】连接状态回调=>', result.connectEnable)
		skBack(result.connectEnable);
	})
}

// 通知事件回调
function addNotificationListener(skBack) {
	jpushModule.addNotificationListener(result => {
		// messageID    string  唯一标识通知消息的 ID
		// title    string  对应 Portal 推送通知界面上的“通知标题”字段
		// content  string  对应 Portal 推送通知界面上的“通知内容”字段
		// badge    string  对应 Portal 推送通知界面上的可选设置里面的“badge”字段 (ios only)
		// ring string  推送通知界面上的可选设置里面的“sound”字段 (ios only)
		// extras   dictionary  对应 Portal 推送消息界面上的“可选设置”里的附加字段
		// iOS  dictionary  对应原生返回的通知内容，如需要更多字段请查看该字段内容
		// android  dictionary  对应原生返回的通知内容，如需要更多字段请查看该字段内容
		// notificationEventType    string  分为notificationArrived和notificationOpened两种
		console.log('【sk】通知事件回调result=>', result)
		skBack(result);
	})
}

// 自定义消息事件回调
function addCustomMessageListener(skBack) {
	jpushModule.addCustomMessageListener(result => {
		// messageID    string  唯一标识通知消息的 ID
		// content  string  对应 Portal 推送通知界面上的“通知内容”字段
		// extras   dictionary  对应 Portal 推送消息界面上的“可选设置”里的附加字段
		console.log('【sk】自定义消息事件回调result=>', result)
		skBack(result);
	})
}

// 应用内消息回调
function addInMessageListener(skBack) {
	jpushModule.addInMessageListener(result => {
		// eventType    string  show - 应用内消息展示 disappear - 应用内消息已消失 click - 应用内消息点击
		// messageType  string  消息类型, eventType 不为 disappear时返回, inMessageNoti - 通知类型的inMessage
		// content  dictionary  应用内消息内容, eventType 不为 disappear 时返回
		console.log('【sk】应用内消息回调result=>', result)
		skBack(result);
	})
}

// 本地通知事件回调
function addLocalNotificationListener(skBack) {
	jpushModule.addLocalNotificationListener(result => {
		// messageID    string  唯一标识通知消息的ID
		// title    string  对应“通知标题”字段
		// content  string  对应“通知内容”字段
		// extras   dictionary  对应“附加内容”字段
		console.log('【sk】本地通知事件回调result=>', result)
		skBack(result);
	})
}

// 添加一个本地通知
function addLocalNotification(e) {
	jpushModule.addLocalNotification({
		messageID: e.messageID ? e.messageID : '', // 唯一标识通知消息的ID
		title: e.title ? e.title : '', // 对应“通知标题”字段
		content: e.content ? e.content : '', // 对应“通知内容”字段
		extras: e.extras ? e.extras : {
			name: '',
			age: ''
		} // 对应“附加内容”字段
	})
}

// 移除指定的本地通知
function removeLocalNotification(e) {
	jpushModule.removeLocalNotification({
		messageID: e.messageID ? e.messageID : '' // 唯一标识通知消息的ID
	})
}

// 移除所有的本地通知
function clearLocalNotifications() {
	jpushModule.clearLocalNotifications()
}

// 标签别名事件回调
function addTagAliasListener(skBack) {
	jpushModule.addTagAliasListener(result => {
		// code number  请求状态码 0 - 成功
		// sequence number  请求时传入的序列号,会在回调时原样返回
		// tags StringArray 执行tag数组操作时返回
		// tag  string  执行查询指定tag(queryTag)操作时会返回
		// tagEnable    boolean 执行查询指定tag(queryTag)操作时会返回是否可用
		// alias    string  对alias进行操作时返回
		console.log('【sk】标签别名事件回调result=>', result)
		skBack(result);
	})
}

// 新增标签
function addTags(e) {
	jpushModule.addTags({
		'tags': e.tags ? e.tags : [], // StringArray  string类型的数组
		'sequence': e.sequence ? e.sequence : 1 // number  请求时传入的序列号，会在回调时原样返回
	})
}

// 覆盖标签
function updateTags(e) {
	jpushModule.updateTags({
		'tags': e.tags ? e.tags : [], // StringArray  string类型的数组
		'sequence': e.sequence ? e.sequence : 1 // number  请求时传入的序列号，会在回调时原样返回
	})
}

// 删除指定标签
function deleteTags(e) {
	jpushModule.deleteTags({
		'tags': e.tags ? e.tags : [], // StringArray  string类型的数组
		'sequence': e.sequence ? e.sequence : 1 // number  请求时传入的序列号，会在回调时原样返回
	})
}

// 清除所有标签
function cleanTags(e) {
	jpushModule.cleanTags({
		'sequence': e.sequence ? e.sequence : 1 // number  请求时传入的序列号，会在回调时原样返回
	})
}

// 查询指定 tag 与当前用户绑定的状态
function queryTag(e) {
	jpushModule.queryTag({
		'tag': e.tag ? e.tag : '', // string  需要查询的标签
		'sequence': e.sequence ? sequence : 1 // number  请求时传入的序列号，会在回调时原样返回
	})
}

// 查询所有标签
function getAllTags(e) {
	jpushModule.getAllTags({
		'sequence': e.sequence ? e.sequence : 1 // number  请求时传入的序列号，会在回调时原样返回
	})
}

// 设置别名
function setAlias(e) {
	console.log('设置别名', e)
	jpushModule.setAlias({
		'alias': e.alias ? e.alias : '', // string  有效的别名组成：字母（区分大小写）、数字、下划线、汉字、特殊字符@!#$&*+=.|
		'sequence': e.sequence ? e.sequence : 1 // number  请求时传入的序列号，会在回调时原样返回
	})
}

// 删除别名
function deleteAlias(e) {
	jpushModule.deleteAlias({
		'sequence': e.sequence ? e.sequence : 1 // number  请求时传入的序列号，会在回调时原样返回
	})
}

// 查询别名
function queryAlias(e) {
	jpushModule.queryAlias({
		'sequence': e.sequence ? e.sequence : 1 // number  请求时传入的序列号，会在回调时原样返回
	})
}

// 开启 CrashLog 上报
function initCrashHandler() {
	jpushModule.initCrashHandler()
}

// 设置地理围栏的最大个数
function setMaxGeofenceNumber(e) {
	jpushModule.setMaxGeofenceNumber(e.geofenceNumber ? e.geofenceNumber : 10) // 默认值为 10 ，iOS系统默认地理围栏最大个数为20
}

// 删除指定id的地理围栏
function deleteGeofence(e) {
	jpushModule.deleteGeofence(e.geofence ? e.geofence : '') // 删除指定id的地理围栏
}

// 设置 Badge
function setBadge(e) {
	jpushModule.setBadge(e.badge ? e.badge : 0) // number
}

// 设置手机号码
function setMobileNumber(e) {
	jpushModule.setMobileNumber({
		sequence: e.sequence ? e.sequence : 1, // number  请求时传入的序列号,会在回调时原样返回
		mobileNumber: e.mobileNumber ? e.mobileNumber : '' // string  手机号码 会与用户信息一一对应。可为空，为空则清除号码。
	})
}

// 设置手机号码回调
function addMobileNumberListener(skBack) {
	jpushModule.addMobileNumberListener(result => {
		// code number  状态码 0 - 成功
		// sequence number  请求时传入的序列号,会在回调时原样返回
		console.log('【sk】设置手机号码回调result=>', result)
		skBack(result);
	})
}


module.exports = {
	openDebug: openDebug,
	closeDebug: closeDebug,
	getRegistrationID: getRegistrationID,
	openSettingsForNotification: openSettingsForNotification,
	initJPushService: initJPushService,
	addConnectEventListener: addConnectEventListener,
	addNotificationListener: addNotificationListener,
	addCustomMessageListener: addCustomMessageListener,
	addInMessageListener: addInMessageListener,
	addLocalNotificationListener: addLocalNotificationListener,
	addLocalNotification: addLocalNotification,
	removeLocalNotification: removeLocalNotification,
	clearLocalNotifications: clearLocalNotifications,
	addTagAliasListener: addTagAliasListener,
	addTags: addTags,
	updateTags: updateTags,
	deleteTags: deleteTags,
	cleanTags: cleanTags,
	queryTag: queryTag,
	getAllTags: getAllTags,
	setAlias: setAlias,
	deleteAlias: deleteAlias,
	queryAlias: queryAlias,
	initCrashHandler: initCrashHandler,
	setMaxGeofenceNumber: setMaxGeofenceNumber,
	deleteGeofence: deleteGeofence,
	setBadge: setBadge,
	setMobileNumber: setMobileNumber,
	addMobileNumberListener: addMobileNumberListener
}