<script>
import * as websocketUtils from 'utils/websocketUtils.js';
import {
	WEBSOCKETADDRESS,
	ROOTHOST
} from "@/common/config.js";
export default {
	data() {
		return {
			// websocketStatus: null,
			timer: null,
		}
	},
	methods: {
		// 建立ws连接
		socketOpen() {
			let userId = uni.getStorageSync("userId");
			let _this = this;
			if (userId) {
				uni.connectSocket({
					url: WEBSOCKETADDRESS + userId,
					header: {
						'content-type': 'application/json'
					},
					method: 'GET'
				});
				uni.onSocketOpen(function (res) {
					console.log('开启方法中的WebSocket连接已打开');
					// _this.websocketStatus = true;  
				});
			}
		},
		socketClose() {
			let _this = this;
			console.log("关闭连接的方法");
			uni.closeSocket({
				success: function (res) {
					console.log("WebSocket关闭成功！");
				},
				fail: function (res) {
					console.log("WebSocket关闭失败！");
				}
			});
		},
		addSound(duration, frequency, volume, type, callback) {
			var audioCtx = new (window.AudioContext || window.webkitAudioContext())();
			var oscillator = audioCtx.createOscillator();
			var gainNode = audioCtx.createGain();

			oscillator.connect(gainNode);
			gainNode.connect(audioCtx.destination);

			if (volume) {
				gainNode.gain.value = volume;
			}
			if (frequency) {
				oscillator.frequency.value = frequency;
			}
			if (type) {
				oscillator.type = type;
			}
			if (callback) {
				oscillator.onended = callback;
			}

			oscillator.start(audioCtx.currentTime);
			oscillator.stop(audioCtx.currentTime + ((duration || 500) / 1000));
		},
		getNotificationPermissions() {
			let platform = uni.getSystemInfoSync().platform; //首先判断app是安卓还是ios
			console.log(platform, "wdwdwdwdwd");
			//#ifdef APP-PLUS
			if (platform == "ios") { //这里是ios的方法
				console.log("我是iOS");
				var UIApplication = plus.ios.import("UIApplication");
				var app = UIApplication.sharedApplication();
				var enabledTypes = 0;
				if (app.currentUserNotificationSettings) {
					var settings = app.currentUserNotificationSettings();
					enabledTypes = settings.plusGetAttribute("types");
					console.log("enabledTypes1:" + enabledTypes);
					if (enabledTypes == 0) { //如果enabledTypes = 0 就是通知权限没有开启
						uni.showModal({
							title: '提示',
							content: '请打开通知权限',
							success: res => {
								if (res.confirm) {
									this.openNotification()
								} else if (res.cancel) {
									console.log('用户点击取消');
								}
							}
						});
					}
				}
				plus.ios.deleteObject(settings);
			} else if (platform == "android") { //下面是安卓的方法
				// console.log("我是安卓", plus.android);
				var main = plus.android.runtimeMainActivity();
				var pkName = main.getPackageName();
				var uid = main.getApplicationInfo().plusGetAttribute("uid");
				var NotificationManagerCompat = plus.android.importClass(
					"android.support.v4.app.NotificationManagerCompat"
				);
				//android.support.v4升级为androidx
				if (NotificationManagerCompat == null) {
					NotificationManagerCompat = plus.android.importClass(
						"androidx.core.app.NotificationManagerCompat"
					);
				}
				var areNotificationsEnabled =
					NotificationManagerCompat.from(main).areNotificationsEnabled();
				// console.log(areNotificationsEnabled);
				// 未开通‘允许通知’权限，则弹窗提醒开通，并点击确认后，跳转到系统设置页面进行设置
				if (!areNotificationsEnabled) {
					this.tongzhi = true; //这里也一样未开启权限，弹出弹窗
				}
				if (!areNotificationsEnabled) {
					uni.showModal({
						title: '提示',
						content: '是否前往打开通知权限',
						success: res => {
							if (res.confirm) {
								this.openNotification()
							} else if (res.cancel) {
								console.log('用户点击取消');
							}
						}
					});
				}
			}
			//#endif
		},
		openNotification() { //弹窗按钮绑定方法
			let platform = uni.getSystemInfoSync().platform; //获取安卓还是ios
			if (platform == "ios") { //如果机型是ios，ios由于权限问题，可能需要手动开启
				var UIApplication = plus.ios.import("UIApplication");
				var app = UIApplication.sharedApplication();
				var settings = app.currentUserNotificationSettings();
				enabledTypes = settings.plusGetAttribute("types");
				var NSURL2 = plus.ios.import("NSURL");
				var setting2 = NSURL2.URLWithString("app-settings:");
				var application2 = UIApplication.sharedApplication();
				application2.openURL(setting2);
				plus.ios.deleteObject(setting2);
				plus.ios.deleteObject(NSURL2);
				plus.ios.deleteObject(application2);
				plus.ios.deleteObject(settings);
			} else if (platform == "android") { //如果机型是安卓
				var main = plus.android.runtimeMainActivity();
				var pkName = main.getPackageName();
				var uid = main.getApplicationInfo().plusGetAttribute("uid");
				var Intent = plus.android.importClass("android.content.Intent");
				var Build = plus.android.importClass("android.os.Build");
				//android 8.0引导
				if (Build.VERSION.SDK_INT >= 26) { //判断安卓系统版本
					var intent = new Intent("android.settings.APP_NOTIFICATION_SETTINGS");
					intent.putExtra("android.provider.extra.APP_PACKAGE", pkName);
				} else if (Build.VERSION.SDK_INT >= 21) { //判断安卓系统版本
					//android 5.0-7.0
					var intent = new Intent("android.settings.APP_NOTIFICATION_SETTINGS");
					intent.putExtra("app_package", pkName);
					intent.putExtra("app_uid", uid);
				} else {
					//(<21)其他--跳转到该应用管理的详情页
					intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
					var uri = Uri.fromParts(
						"package",
						mainActivity.getPackageName(),
						null
					);
					intent.setData(uri);
				}
				// 跳转到该应用的系统通知设置页
				main.startActivity(intent);
			}
		},
	},
	onLaunch: function () {
		this.getNotificationPermissions();
		//#ifdef APP-PLUS
		// APP检测更新 具体打包流程可以参考：https://ask.dcloud.net.cn/article/35667
		plus.screen.lockOrientation('portrait-primary'); //竖屏正方向锁定
		//获取是否热更新过
		const updated = uni.getStorageSync('updated'); // 尝试读取storage

		if (updated.completed === true) {
			// 如果上次刚更新过
			// 删除安装包及安装记录
			console.log('安装记录被删除，更新成功');
			uni.removeSavedFile({
				filePath: updated.packgePath,
				success: res => {
					uni.removeStorageSync('updated');
				}
			});
		} else if (updated.completed === false) {
			uni.removeStorageSync('updated');
			plus.runtime.install(updated.packgePath, {
				force: true
			});
			uni.setStorage({
				key: 'updated',
				data: {
					completed: true,
					packgePath: updated.packgePath
				},
				success: res => {
					console.log('成功安装上次的更新，应用需要重启才能继续完成');
				}
			});
			uni.showModal({
				title: '温馨提示',
				content: '应用将重启以完成更新',
				showCancel: false,
				complete: () => {
					plus.runtime.restart();
				}
			});
		} else {
			//获取当前系统版本信息
			plus.runtime.getProperty(plus.runtime.appid, widgetInfo => {
				//请求后台接口 解析数据 对比版本
				let data = {
					classify: 2
				}
				this.$Request.getT('/app/user/selectNewApp', data).then(res => {
					res = res.data[0];
					console.log(res)
					console.log(widgetInfo.version)
					let currentVersion = Number(widgetInfo.version);
					let serverVersion = Number(res.version);
					console.log(currentVersion, serverVersion, currentVersion < serverVersion);
					if (res.wgtUrl && (currentVersion < serverVersion)) {
						let downloadLink = '';
						let androidLink = res.androidWgtUrl;
						let iosLink = res.iosWgtUrl;
						let ready = false;
						let that = this;
						console.log("ceshiceshi");
						//校验是是不是热更新
						if (res.wgtUrl.match(RegExp(/.wgt/))) {
							console.log("123123anzhuo");
							// 判断系统类型
							if (plus.os.name.toLowerCase() === 'android') {
								console.log('安卓系统');
								if (androidLink && androidLink !== '#') {
									// 我这里默认#也是没有地址，请根据业务自行修改
									console.log('发现下载地址');
									// 安卓：创建下载任务
									if (androidLink.match(RegExp(/.wgt/))) {
										console.log('确认wgt热更新包');
										downloadLink = androidLink;
										ready = true;
									} else {
										console.log('安卓推荐.wgt强制更新，.apk的强制更新请您自行修改程序');
									}
								} else {
									console.log('下载地址是空的，无法继续');
								}
							} else {
								console.log('苹果系统');
								if (iosLink && iosLink !== '#') {
									// 我这里默认#也是没有地址，请根据业务自行修改
									console.log('发现下载地址');
									// 苹果(A)：进行热更新（如果iosLink是wgt更新包的下载地址）判断文件名中是否含有.wgt
									if (iosLink.match(RegExp(/.wgt/))) {
										console.log('确认wgt热更新包');
										downloadLink = iosLink;
										ready = true;
									} else {
										console.log('苹果只支持.wgt强制更新');
									}
								} else {
									console.log('下载地址是空的，无法继续');
								}
							}
							if (ready) {
								console.log('任务开始');
								let downloadTask = uni.downloadFile({
									url: downloadLink,
									success: res => {
										if (res.statusCode === 200) {
											// 保存下载的安装包
											console.log('保存安装包');
											uni.saveFile({
												tempFilePath: res.tempFilePath,
												success: res => {
													const packgePath = res
														.savedFilePath;
													// 保存更新记录到stroage，下次启动app时安装更新
													uni.setStorage({
														key: 'updated',
														data: {
															completed: false,
															packgePath: packgePath
														},
														success: () => {
															console
																.log(
																	'成功保存记录'
																);
														}
													});
													// 任务完成，关闭下载任务
													console.log(
														'任务完成，关闭下载任务，下一次启动应用时将安装更新'
													);
													downloadTask.abort();
													downloadTask = null;
												}
											});
										}
									}
								});
							} else {
								console.log('下载地址未准备，无法开启下载任务');
							}
						} else {
							//不是热更新是在线更新 校验是否强制升级
							if (res.method == 'true') {
								uni.showModal({
									showCancel: false,
									confirmText: '立即更新',
									title: '发现新版本',
									content: res.des,
									success: res => {
										if (res.confirm) {
											that.$queue.showLoading('下载中...');
											if (uni.getSystemInfoSync().platform ==
												'android') {
												uni.downloadFile({
													url: androidLink,
													success: downloadResult => {
														if (downloadResult
															.statusCode ===
															200) {
															plus.runtime
																.install(
																	downloadResult
																		.tempFilePath, {
																	force: false
																},
																	d => {
																		console
																			.log(
																				'install success...'
																			);
																		plus.runtime
																			.restart();
																	},
																	e => {
																		console
																			.error(
																				'install fail...'
																			);
																	}
																);
														}
													}
												});
											}
											if (uni.getSystemInfoSync().platform ==
												'ios') {
												plus.runtime.openURL(iosLink, function (
													res) { });
											}
										} else if (res.cancel) {
											console.log('取消');
										}
									}
								});
							} else {
								uni.showModal({
									title: '发现新版本',
									confirmText: '立即更新',
									cancelText: '下次更新',
									content: res.des,
									success: res => {
										if (res.confirm) {
											that.$queue.showLoading('下载中...');
											if (uni.getSystemInfoSync().platform ==
												'android') {
												uni.downloadFile({
													url: androidLink,
													success: downloadResult => {
														if (downloadResult
															.statusCode ===
															200) {
															plus.runtime
																.install(
																	downloadResult
																		.tempFilePath, {
																	force: false
																},
																	d => {
																		console
																			.log(
																				'install success...'
																			);
																		plus.runtime
																			.restart();
																	},
																	e => {
																		console
																			.error(
																				'install fail...'
																			);
																	}
																);
														}
													}
												});
											}
											if (uni.getSystemInfoSync().platform ==
												'ios') {
												plus.runtime.openURL(iosLink, function (
													res) { });
											}
										} else if (res.cancel) {
											console.log('取消');
										}
									}
								});
							}
						}
					}
				});
			});
		}

		//#endif
	},
	onUnload: function () {
		// this.socketClose();
		// this.websocketStatus = null;
		// clearInterval(this.timer);
		this.timer = null;
		uni.$off("onlineStatus");
	},
	destroyed() {
		uni.$off("onlineStatus");
	},
	mounted() {
		// 下面代码用于接受技师端首页在线离线状态,当前业务逻辑暂不需要ws,后期涉及到的话解开即可,即在线建立连接,离线断开连接,后端用于离线时计算积分
		// uni.$on("onlineStatus", (status) => {
		// 	if (status == 1) {
		// 		// 开启websocket监听
		// 		this.socketOpen();
		// 	} else {
		// 		this.socketClose();
		// 	}
		// })
	},
	onShow: function () {
		let _this = this;
		//监听websocket断开时
		// uni.onSocketClose(function(res) {
		// debugger;
		// _this.websocketStatus = false;
		_this.$queue.setData("onlineStatus", 2);
		// _this.timer = setInterval(() => {
		// debugger;
		// if (_this.websocketStatus == false) {
		// 	_this.socketOpen();
		// 	clearInterval(_this.timer);
		// } else {
		// 	clearInterval(_this.timer);
		// }
		// }, 3000)
		// });
		this.$Request.get('/app/common/type/238').then(res => {
			if (res.code == 0) {
				// #ifdef MP-WEIXIN
				this.$queue.setData('XCXIsSelect', res.data.value);
				// #endif
				// #ifndef MP-WEIXIN
				this.$queue.setData('XCXIsSelect', '是');
				// #endif
			}
		});
		// this.$Request.get('/app/common/type/298').then(res => {
		// 	if (res.code == 0) {
		// 		// #ifdef MP-WEIXIN
		// 		this.$queue.setData('XCXIsSelect', res.data.value);
		// 		// #endif
		// 		// #ifndef MP-WEIXIN
		// 		this.$queue.setData('XCXIsSelect', '是');
		// 		// #endif
		// 	}
		// });
		// 商户端联系方式 1 手机号 2企业微信 305
		this.$Request.get('/app/common/type/305').then(res => {
			if (res.code == 0) {
				this.$queue.setData('kefu', res.data.value);
			}
		});
		// 商户端客服手机号 306
		this.$Request.get('/app/common/type/306').then(res => {
			if (res.code == 0) {
				this.$queue.setData('kefuPhone', res.data.value);
			}
		});
		// 商户端企业微信AppId 307
		this.$Request.get('/app/common/type/307').then(res => {
			if (res.code == 0) {
				this.$queue.setData('kefuAppId', res.data.value);
			}
		});
		// 商户端企业微信链接 308
		this.$Request.get('/app/common/type/308').then(res => {
			if (res.code == 0) {
				this.$queue.setData('kefuUrl', res.data.value);
			}
		});
		// 理疗师是否可以自己修改服务 319
		this.$Request.get('/app/common/type/319').then(res => {
			if (res.code == 0) {
				this.$queue.setData('xmCheck', res.data.value);
			}
		});
		// 是否开启保证金 320
		this.$Request.get('/app/common/type/320').then(res => {
			if (res.code == 0) {
				this.$queue.setData('bzjCheck', res.data.value);
			}
		});
		// 提现底部提示	326
		this.$Request.get('/app/common/type/326').then(res => {
			if (res.code == 0) {
				this.$queue.setData('txMsg', res.data.value);
			}
		});
		// 商城配送方式 328
		this.$Request.get('/app/common/type/328').then(res => {
			if (res.code == 0) {
				this.$queue.setData('peisongSel', res.data.value);
			}
		});
		// 是否开启理疗师端商城 329
		this.$Request.get('/app/common/type/329').then(res => {
			if (res.code == 0) {
				this.$queue.setData('shopSel', res.data.value);
			}
		});
		// 商家地址 330
		this.$Request.get('/app/common/type/330').then(res => {
			if (res.code == 0) {
				this.$queue.setData('adminShopAddress', res.data.value);
			}
		});
		// 商家联系方式 331
		this.$Request.get('/app/common/type/331').then(res => {
			if (res.code == 0) {
				this.$queue.setData('adminShopPhone', res.data.value);
			}
		});
		// 商家名称 332
		this.$Request.get('/app/common/type/332').then(res => {
			if (res.code == 0) {
				this.$queue.setData('adminShopName', res.data.value);
			}
		});
		// 商家经纬度 333
		this.$Request.get('/app/common/type/333').then(res => {
			if (res.code == 0) {
				this.$queue.setData('adminShopJW', res.data.value);
			}
		});
		//是否开启银联提现 378
		this.$Request.get('/app/common/type/378').then(res => {
			if (res.code == 0) {
				this.$queue.setData('ylSel', res.data.value);
			}
		});
		//是否开启阿里云隐私电话 383
		this.$Request.get('/app/common/type/383').then(res => {
			if (res.code == 0) {
				this.$queue.setData('aliphone', res.data.value);
			}
		});
		// 是否开启微信提现	389
		this.$Request.get('/app/common/type/389').then(res => {
			if (res.code == 0) {
				this.$queue.setData('wxTxSel', res.data.value);
			}
		});
		// 是否开启银联提现	378
		this.$Request.get('/app/common/type/378').then(res => {
			if (res.code == 0) {
				this.$queue.setData('ylTxSel', res.data.value);
			}
		});
		// 是否开启为理疗师充值	390
		this.$Request.get('/app/common/type/390').then(res => {
			if (res.code == 0) {
				this.$queue.setData('jsczSel', res.data.value);
			}
		});
		// 忙时时间切换 1半个小时 2一个小时 392
		this.$Request.get('/app/common/type/392').then(res => {
			if (res.code == 0) {
				this.$queue.setData('msTimeDate', res.data.value);
			}
		});
		// 开始服务是否需要上传照片	420
		this.$Request.get('/app/common/type/420').then(res => {
			if (res.code == 0) {
				this.$queue.setData('startImgSel', res.data.value);
			}
		});
		//是否开启理疗师端实时定位	375
		// this.$Request.get('/app/common/type/375').then(res => {
		// 	if (res.code == 0 && res.data && res.data.value === '是') {
		// 		setInterval(d => { //定时器，定时去调取聊天未读消息
		// 			let that = this;
		// 			let userId = uni.getStorageSync('userId')
		// 			let longitude = uni.getStorageSync('longitude');
		// 			let latitude = uni.getStorageSync('latitude');
		// 			if (userId && longitude && latitude) {
		// 				let data = {
		// 					typeId: longitude,
		// 					typeName: latitude,
		// 					userId: userId
		// 				}
		// 				that.$Request.postJson('/app/message/insertArtificerLocation',data).then(
		// 				res => {
		// 					if (res.code === 0) {

		// 					}
		// 				});
		// 			}
		// 		}, 60000);
		// 	}
		// });
		let userId = this.$queue.getData("userId")

		if (userId) {
			this.$Request.getT('/app/user/selectUserById').then(res => {

				if (res.code == 0) {

					if (res.data.status == 2) {

						uni.showModal({
							title: '账号已被封禁',
							content: '请在【我的客服】申诉，申诉成功后重新登录',
							showCancel: false,
							cancelText: '',
							confirmText: '我知道了',
							success: res => {
								uni.clearStorageSync()
							},
							fail: () => { },
							complete: () => { }
						});
					}

				}
			})
		}

		console.log('App Show')

		// #ifdef APP-PLUS

		if (uni.getSystemInfoSync().platform == 'android') {
			let clientid = plus.push.getClientInfo().clientid;

			let userId = this.$queue.getData('userId');
			if (userId) {
				this.$Request.postT('/app/user/updateClientId?clientId=' + clientid + '&userId=' + userId).then(
					res => { });
			}
		}

		//#endif
		//#ifdef H5
		let isopen = false
		this.$Request.get('/app/common/type/237').then(res => {
			if (res.data.value == '是') {
				isopen = true
			}
		});
		if (isopen) {
			let ua = navigator.userAgent.toLowerCase();
			if (ua.indexOf('micromessenger') !== -1) {
				let openid = uni.getStorageSync('openid');
				let userId = uni.getStorageSync('userId');
				let that = this;
				if (!openid) {
					if (window.location.href.indexOf('?code=') !== -1 || window.location.href.indexOf('&code=') !==
						-1) {
						let code;
						if (window.location.href.indexOf('?code=') !== -1) {
							code = window.location.href.split('?code=')[1].split('&')[0];
						} else {
							code = window.location.href.split('&code=')[1].split('&')[0];
						}
						this.$Request.get('/app/Login/getOpenId?code=' + code).then(ret => {
							uni.setStorageSync('openId', ret.data)
							this.$Request.get('/app/Login/openid/login?openId=' + ret.data).then(res => {
								this.$queue.setData("userId", res.user.userId);
								this.$queue.setData("token", res.token);
								this.$queue.setData("phone", res.user.phone);
								this.$queue.setData("userName", res.user.userName);
								this.$queue.setData("avatar", res.user.avatar);
								this.$queue.setData("invitationCode", res.user.invitationCode);
								this.$queue.setData("inviterCode", res.user.inviterCode);
							});
						});
					} else {
						this.$Request.get('/app/common/type/108').then(res => {
							if (res.data.value == '是') {
								window.location.href =
									'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' +
									that.$queue.getWxAppid() +
									'&redirect_uri=' +
									window.location.href.split('#')[0] +
									'&response_type=code&scope=snsapi_userinfo#wechat_redirect';
							}
						});
					}
				}
				if (userId && openid) {
					this.$Request.get('/app/Login/bindOpenId?userId=' + userId + '&openId=' + openid).then(res => {
						// 盛安到家
					});
				}
			}
		}


		//#endif
		// websocketUtils.changeIsUploadLocation(true);
		//console.log('websocketUtils.isUploadLocation() =>',websocketUtils.isUploadLocation());
		websocketUtils.getLocaton();
		uni.websocketUtils = websocketUtils;
		if (userId) {
			websocketUtils.getArtificerList();
		}

	},
	onHide: function () {
		console.log('App Hide')
	}
}
</script>

<style lang="scss">
/*每个页面公共css */
@import "uview-ui/index.scss";
@import 'components/colorui/main.css';
@import 'components/colorui/icon.css';
@import './static/css/common.css';
@import './static/css/simplepro.css';
/deep/.uni-scroll-view-content{
		height: 350px !important;
	}
page {
	background-color: #FFFFFF;
	color: #343546;
}

.bg {
	background-color: #F7F7F7;
}
</style>