/**
 * 小程序相关权限
 * @param {String} scopeValue - 权限种类,isMessage为订阅消息设置,默认false
 *                         
 */

const TIPS_MAP = {
	'userInfo': '用户信息',
	'userLocation': '地理位置', //需要在manifest中配置permission。
	'address': '通信地址',
	'userLocationBackground': '后台定位',
	'record': '录音功能',
	'writePhotosAlbum': '保存到相册',
	'camera': '摄像头',
	'invoice': '获取发票',
	'invoiceTitle': '发票抬头',
	'werun': '微信步数',
	'message': '订阅消息'
}

export default class MpAuth {

	constructor(scopeValue) {
		this.scopeValue = scopeValue
		this.isMessage = scopeValue === 'message' ? true : false
	}

	// 检测当前请求权限是否可用。
	checkAuth() {
		const that = this;
		return new Promise((resolve, reject) => {
			uni.getSetting({
				withSubscriptions: that.isMessage, //是否获取用户订阅消息的订阅状态
				success: res => {
					if (!that.isMessage) { // 非订阅消息
						if (!res.authSetting[
								`scope.${this.scopeValue}`]) { //用户未请求过此权限,后者用户拒绝了此权限
							uni.authorize({ //如果没请求过,会弹窗询问。同意过,直接success。此前拒绝,直接fai
								scope: `scope.${this.scopeValue}`,
								success: res => { //用户同意
									console.log(
										`%c用户同意${TIPS_MAP[this.scopeValue]}权限1`,
										'color:green;background:yellow');
									resolve(1)
								},
								fail: err => { //用户拒绝
									console.log(
										`%c用户拒绝${TIPS_MAP[this.scopeValue]}权限`,
										'color:green;background:yellow');
									resolve(0)
									that.setAuth()
								}
							})
						} else { //用户同意授权此权限,直接调用接口
							console.log(`%c用户同意${TIPS_MAP[this.scopeValue]}权限2`,
								'color:green;background:yellow');
							resolve(1)
						}
					} else { //订阅消息 TODO

					}
				},
				fail: err => {
					console.log(`%cuni.getSetting失败:`, 'color:green;background:yellow');
					console.log(err);
				}
			})
		})


	}

	// 引导用户开启权限
	setAuth() {
		uni.showModal({
			title: '设置权限',
			content: `当前功能需要${TIPS_MAP[this.scopeValue]}权限,是否开启?`,
			confirmText: '立即授权',
			success: res => {
				res.confirm && uni.openSetting()
			},
			fail: err => {
				console.log(`%cuni.showModal失败:`, 'color:green;background:yellow');
			}
		})
	}

}