import Vue from 'vue'
import store from './store'
import App from './App'
import share from './common/share.js'
Vue.mixin(share)
import cuCustom from './components/colorui/components/cu-custom.vue';
Vue.component('cu-custom',cuCustom)

import sale from './pages/sale/information.vue'
Vue.component('sale',sale)
import tarBar from './components/tarbar.vue'
Vue.component('tar-bar', tarBar)
import tran from './pages/tran/tran.vue'
Vue.component('tran',tran)

import my from './pages/user/user.vue'
Vue.component('my',my)
// main.js
import uView from "./components/uview-ui";
Vue.use(uView);
Vue.config.productionTip = false

const vuexStore = require("@/store/$u.mixin.js");

Vue.mixin(vuexStore);
Vue.config.productionTip = false
App.mpType = 'app'
import * as filters from './filters' 
import * as config from './config'


Object.keys(filters).forEach(key => {
	Vue.filter(key, filters[key])
})

//#ifdef H5
let jweixin = require('./components/jweixin-module')
let jwx = require('./components/jweixin-module/jwx')
Vue.mixin({
	onShow() {
		jwx.configWeiXin(jwx => {
		})
	}
})
//#endif

const defConfig = config.def

const msg = (title, duration = 3500, mask = false, icon = 'none') => {
	//统一提示方便全局修改
	if (Boolean(title) === false) {
		return;
	}
	uni.showToast({
		title,
		duration,
		mask,
		icon
	});
}

let userInfo = undefined

const logout = () => {
	userInfo = undefined
	uni.removeStorage({
		key: 'userInfo'
	})
}

const setUserInfo = (i) => {
	userInfo = i
}

const isVip = () => {
	return userInfo && userInfo.level
}

let loginLock = false

const request = (_gp, _mt, data = {}, failCallback) => {
	//异步请求数据
	return new Promise(resolve => {
		if (!userInfo || !userInfo.accessToken) {
			userInfo = uni.getStorageSync('userInfo')
		}
		let accessToken = userInfo ? userInfo.accessToken : ''
		let baseUrl = config.def().baseUrl
		uni.request({
			url: baseUrl + '/m.api',
			data: {
				...data,
				_gp,
				_mt
			},
			method: 'POST',
			header: {
				'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
				'ACCESSTOKEN': accessToken
			},
			success: (res) => {
				if (res.statusCode === 200) {
					if (res.data.errno === 200) {
						resolve(res.data);
					} else if (res.data.errno === 10001) {
						if (failCallback) {
							failCallback(res.data)
						}
						uni.showModal({
							title: '登录提示',
							content: '您尚未登录，是否立即登录？',
							showCancel: true,
							confirmText: '登录',
							success: (e) => {
								if (e.confirm) {
									uni.navigateTo({
										url: '/pages/public/login'
									})
								}
							},
							fail: () => {},
							complete: () => {}
						})
						if (!loginLock) {
							loginLock = true
							// uni.showModal({
							// 	title: '登录提示',
							// 	content: '您尚未登录，是否立即登录？',
							// 	showCancel: false,
							// 	confirmText: '登录',
							// 	success: (e) => {
							// 		if (e.confirm) {
							// 			uni.navigateTo({
							// 				url: '/pages/public/login'
							// 			})
							// 		}
							// 	},
							// 	fail: () => {},
							// 	complete: () => {
							// 		loginLock = false
							// 	}
							// })
						}

					} else {
						if (failCallback) {
							failCallback(res.data)
						} else {
							uni.showToast({
								title: res.data.errmsg,
								icon: 'none'
							})
						}
					}
				}
			}
		})
	})
}

const uploadImg = (successCallback) => {
	let baseUrl = config.def().baseUrl
	uni.chooseImage({
		sizeType: ['compressed'],
		success: function(res) {
			for (let i = 0; i < res.tempFilePaths.length; i++) {
				uni.request({
					url: baseUrl + '/upload',
					method: 'get',
					success: function(signRes) {
						uni.showLoading({
							title: '图片上传中',
							mask:true
						})
						let fileName = ('imgs/' + random_string(15) + get_suffix(res.tempFilePaths[i]))
						uni.uploadFile({
							url: signRes.data.baseUrl,
							filePath: res.tempFilePaths[i],
							name: 'file',
							formData: {
								name: res.tempFilePaths[i],
								key: fileName,
								policy: signRes.data.policy,
								OSSAccessKeyId: signRes.data.accessid,
								success_action_status: '200',
								signature: signRes.data.signature
							},
							success: function(uploadRes) {
								uni.hideLoading()
								if (uploadRes.statusCode === 200) {
									if (successCallback) {
										successCallback(signRes.data.baseUrl + fileName)
									} else {
										uni.showToast({
											title: '上传成功',
											icon: 'none'
										})
									}
								} else {
									uni.hideLoading()
									uni.showToast({
										title: '网络错误 code=' + uploadRes.statusCode,
										icon: 'none'
									})
								}
							}
						})
					}
				})
			}
		}
	})
}

function get_suffix(filename) {
	var pos = filename.lastIndexOf('.')
	var suffix = ''
	if (pos != -1) {
		suffix = filename.substring(pos)
	}
	return suffix;
}

function random_string(len) {
	len = len || 32;
	var chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';
	var maxPos = chars.length;
	var pwd = '';
	for (var i = 0; i < len; i++) {
		pwd += chars.charAt(Math.floor(Math.random() * maxPos));
	}
	return pwd;
}

const prePage = () => {
	let pages = getCurrentPages();
	let prePage = pages[pages.length - 2];
	// #ifdef H5
	return prePage;
	// #endif
	return prePage.$vm;
}

const globalData = {}

Vue.config.productionTip = false
Vue.prototype.$fire = new Vue();
Vue.prototype.$store = store;
Vue.prototype.$api = {
	msg,
	prePage,
	request,
	uploadImg,
	logout,
	isVip,
	setUserInfo,
	defConfig,
	globalData
};
//#ifdef H5
Vue.prototype.$jweixin = jweixin;
//#endif

App.mpType = 'app'

const app = new Vue({
	...App
})
app.$mount()

    /**  
     * 获取系统权限  
     * @param {Object} permission       权限标识  
     *      CAMERA: (String 类型 )访问摄像头权限         用于调用摄像头（plus.camera.* plus.barcode.*）  
     *      CONTACTS: (String 类型 )访问系统联系人权限     用于访问（读、写）系统通讯录（plus.gallery.*）  
     *      GALLERY: (String 类型 )访问系统相册权限       用于访问（读、写）系统相册（plus.gallery.*）  
     *      LOCATION: (String 类型 )定位权限              用于获取当前用户位置信息（plus.geolocation.*）  
     *      NOTIFITION: (String 类型 )消息通知权限      用于接收系统消息通知（plus.push.*）  
     *      RECORD: (String 类型 )录音权限                用于进行本地录音操作（plus.audio.AudioRecorder）  
     *      SHORTCUT: (String 类型 )创建桌面快捷方式权限    用于在系统桌面创建快捷方式图标（plus.navigator.createShortcut）  
     *   
     * @param {Object} successCallBack  成功回调  
     * @param {Object} errorCallBack    失败回调  
     */  
function getPermission(permissionIdentity, successCallBack, errorCallBack){  
        //权限标识转换成大写  
        var permissionIdentity = permissionIdentity.toUpperCase();  
        //获取检测权限的状态  
        var checkResult = plus.navigator.checkPermission(permissionIdentity);  
        //权限状态是否正常  
        var permissionStatusOk = false;  
        //权限中文名称  
        var permissionName = '';  
        //对应 andorid 的具体权限  
        var androidPermission = '';  
        //获取权限中文意思与对应 android 系统的权限字符串  
        switch (permissionIdentity) {  
            case 'CAMERA':  
                permissionName = '摄像头';  
                androidPermission = 'android.permission.CAMERA';  
                break;  
            case 'CONTACTS':  
                permissionName = '系统联系人';  
                androidPermission = 'android.permission.READ_CONTACTS'  
                break;  
            case 'GALLERY':  
                permissionName = '系统相册';  
                androidPermission = 'android.permission.READ_EXTERNAL_STORAGE';  
                break;  
            case 'LOCATION':  
                permissionName = '定位';  
                androidPermission = 'android.permission.ACCESS_COARSE_LOCATION';  
                break;  
            case 'NOTIFITION':  
                permissionName = '消息通知';  
                androidPermission = '消息通知';  
                break;  
            case 'RECORD':  
                permissionName = '录音';  
                androidPermission = 'android.permission.RECORD_AUDIO';  
                break;  
            case 'SHORTCUT':  
                permissionName = '创建桌面快捷方式';  
                androidPermission = 'com.android.launcher.permission.INSTALL_SHORTCUT';  
                break;  
            default:  
                permissionName = '未知';  
                androidPermission = '未知';  
                break;  
        }  

        //判断检查权限的结果  
        switch (checkResult) {  
            case 'authorized':  
                //正常的  
                permissionStatusOk = true  
                break;  
            case 'denied':  
                //表示程序已被用户拒绝使用此权限，如果是拒绝的就再次提示用户打开确认提示框  
                //如果有该权限但是没有打开不进行操作还是会去申请或手动打开  
                // console.log('已关闭' + permissionName + '权限')  
                // errorCallBack('已关闭' + permissionName + '权限');  
                // return  
                break;  
            case 'undetermined':  
                // 表示程序未确定是否可使用此权限，此时调用对应的API时系统会弹出提示框让用户确认  
                // this.requestPermissions(androidPermission, permissionName, successCallBack, errorCallBack)  
                // errorCallBack('未确定' + permissionName + '权限');  
                // return  
                break;  
            case 'unknown':  
                errorCallBack('无法查询' + permissionName + '权限');  
                return  
                break;  
            default:  
                errorCallBack('不支持' + permissionName + '权限');  
                return  
                break;  
        }  

        //如果权限是正常的执行成功回调  
        if (permissionStatusOk) {  
            successCallBack()  
        } else {  
            //如果不正常，如果是 andorid 系统，就动态申请权限  
            if (plus.os.name == 'Android') {  
                //动态申请权限  
                plus.android.requestPermissions([androidPermission], function(e) {  
                    if (e.deniedAlways.length > 0) {  
                        //权限被永久拒绝  
                        // 弹出提示框解释为何需要定位权限，引导用户打开设置页面开启  
                        errorCallBack(permissionName + ' 权限被永久拒绝，请到设置权限里找到应用手动开启权限，否则将不能使用此功能。')  
                        // console.log('Always Denied!!! ' + e.deniedAlways.toString());  
                    }  
                    if (e.deniedPresent.length > 0) {  
                        //权限被临时拒绝  
                        // 弹出提示框解释为何需要定位权限，可再次调用plus.android.requestPermissions申请权限  
                        errorCallBack('拒绝开启 ' + permissionName + ' 权限，将不能使用此功能！')  
                        // console.log('Present Denied!!! ' + e.deniedPresent.toString());  
                    }  
                    if (e.granted.length > 0) {  
                        //权限被允许  
                        //调用依赖获取定位权限的代码  
                        successCallBack()  
                        // console.log('Granted!!! ' + e.granted.toString());  
                    }  
                }, function(e) {  
                    errorCallBack('请求 ' + permissionName + ' 权限失败，' + +JSON.stringify(e))  
                    // console.log('Request Permissions error:' + JSON.stringify(e));  
                })  
            } else if (plus.os.name == 'iOS') {  
                //ios ,第一次使用目的权限时，应用的权限列表里是不存在的，所以先默认执行一下成功回调，打开要使用的操作，比如 plus.camera  
                //这时系统会提示是否打开相应的权限，如果拒绝也没关系，因为应用的权限列表里已经存在该权限了，下次再调用相应权限时，就会  
                //走 else 里的流程，会给用户提示，并且跳转到应该的权限页面，让用户手动打开。  
                if (checkResult == 'undetermined') {  
                    //调用依赖获取定位权限的代码  
                    successCallBack(true)  
                } else {  
                    //如果是 ios 系统，ios 没有动态申请操作，所以提示用户去设置页面手动打开  
                    mui.confirm(permissionName + ' 权限没有开启，是否去开启？', '提醒', ['取消', '确认'], function(e) {  
                        //取消  
                        if (e.index == 0) {  
                            errorCallBack('拒绝开启 ' + permissionName + ' 权限，将不能使用此功能！')  
                        } else if (e.index == 1) {  
                            //确认，打开当前应用权限设置页面  
                            var UIApplication = plus.ios.import('UIApplication');  
                            var application2 = UIApplication.sharedApplication();  
                            var NSURL2 = plus.ios.import('NSURL');  
                            // var setting2 = NSURL2.URLWithString("prefs:root=LOCATION_SERVICES");                             
                            var setting2 = NSURL2.URLWithString('app-settings:');  
                            application2.openURL(setting2);  

                            plus.ios.deleteObject(setting2);  
                            plus.ios.deleteObject(NSURL2);  
                            plus.ios.deleteObject(application2)  
                        }  
                    }, 'div')  
                }  
            }  
        }  
}