<template>
	<view>
		<view id="map" :style="{ height: mapHeight + 'px' }" class='map' />

		<!-- <view class="fab">
			<uni-fab ref="fab" :pattern="fab.pattern" :content="fab.content" :horizontal="fab.horizontal"
				:vertical="fab.vertical" :direction="fab.direction" @trigger="trigger" @fabClick="fabClick" />
		</view> -->

		<!-- <div ref="testdiv" class="dragLayer" :class="testdiv" :style="{top: topSize + 'rpx' }"
			@touchstart="handleTouchStart" @touchend="handleTouchEnd" @touchmove="handleTouchMove"> -->
		<view :v-show="popupShow" :style="{ height: popupHeight + 'px' }">
			<uni-list v-for="(item, index) in players" :key="index" :border="true">
				<!-- 右侧带角标 -->
				<!-- <uni-list-chat :title="item.name" avatar="https://web-assets.dcloud.net.cn/unidoc/zh/unicloudlogo.png"
					note="您收到一条新的消息" time="2020-02-02 20:20" badge-text="12"></uni-list-chat> -->
				<uni-list-item :title="item.name + ' 打点数: ' + item.effectivenum + ' / ' + item.totalcontrolnum + ' 距离: ' + item.distance + '米 配速: ' + item.pace" 
					:note="'平均心率: ' + item.avghr + ' 最大心率: ' + item.maxhr + ' CAL: ' + item.calorie + ' Ck: ' + item.ck + ' Ei: ' + item.ei">
				</uni-list-item>
			</uni-list>
			<!-- </div> -->
		</view>

		<!-- 普通弹窗 -->
		<!-- <uni-popup ref="popup" :is-mask-click="false" background-color="#fff" @change="onPopupChange">
			<view class="popup-content"
				:class="{ 'popup-bottom': popupType === 'bottom', 'popup-right': popupType === 'right' }">
				<text class="text">popup 内容</text>
			</view>
		</uni-popup> -->
	</view>
</template>

<script module="leaflet" lang="renderjs">
	import 'leaflet/dist/leaflet.css'
	import '@/utils/map/leafletHelper.css'

	import {
		DefaultRequest,
		IdRequest
	} from "@/grpc/base_pb.js"

	// import mapHelper from '@/utils/mapHelper'
	import leafletHelper from '@/utils/map/leafletHelper'

	export default {
		components: {},
		data() {
			return {
				interval: null,

				systemInfo: null,
				deviceOrientation: 'portrait', // 设备方向（竖屏 portrait | 横屏 landscape）
				mapHeight: 0,
				popupHeight: 100,
				popupType: 'bottom',
				popupShow: false,

				actionId: 2,
				actionDetail: {},
				mapUrl: null,
				mapInfo: {},

				map: null,
				checkPoints: [{
						cp_id: 1, // 检查点ID
						serial_num: 1, // 序号
						c_type: 1, // 检查点类型 1：起始点 2：途经点 3：结束点 4：其他
						category: 1, // 检查点种类 1：实体点 2：虚拟点 3：VR点
						latitude: 36.67205,
						longitude: 117.126945
					},
					{
						cp_id: 2,
						serial_num: 2,
						c_type: 1,
						category: 1,
						latitude: 36.670871,
						longitude: 117.12725
					},
					{
						cp_id: 3,
						serial_num: 3,
						c_type: 1,
						category: 1,
						latitude: 36.671723,
						longitude: 117.128565
					},
					{
						cp_id: 4,
						serial_num: 4,
						c_type: 1,
						category: 1,
						latitude: 36.672704,
						longitude: 117.128415
					},
					{
						cp_id: 5,
						serial_num: 5,
						c_type: 1,
						category: 1,
						latitude: 36.672003,
						longitude: 117.129305
					},
					{
						cp_id: 6,
						serial_num: 6,
						c_type: 1,
						category: 1,
						latitude: 36.672416,
						longitude: 117.127116
					},
					{
						cp_id: 7,
						serial_num: 7,
						c_type: 1,
						category: 1,
						latitude: 36.671689,
						longitude: 117.127798
					},
					{
						cp_id: 8,
						serial_num: 8,
						c_type: 1,
						category: 1,
						latitude: 36.67094,
						longitude: 117.128522
					},
				],
				players: [{
						id: 1,
						name: '小鱼儿',
						phone: '13105310001',
					},
					{
						id: 2,
						name: '花无缺',
						phone: '13105310002',
					},
					{
						id: 3,
						name: '李大嘴',
						phone: '13105310003',
					},
					{
						id: 4,
						name: '叶南天',
						phone: '13105310004',
					},
				],
				players_position: [{
						id: 1,
						latitude: 36.671357,
						longitude: 117.127925
					},
					{
						id: 2,
						latitude: 36.671657,
						longitude: 117.125925
					},
					{
						id: 3,
						latitude: 36.672257,
						longitude: 117.128925
					},
					{
						id: 4,
						latitude: 36.670433,
						longitude: 117.127873
					}
				],

				// fab: {
				// 	horizontal: 'left',
				// 	vertical: 'bottom',
				// 	direction: 'horizontal',
				// 	pattern: {
				// 		color: '#7A7E83',
				// 		backgroundColor: '#fff',
				// 		selectedColor: '#007AFF',
				// 		buttonColor: '#007AFF',
				// 		iconColor: '#fff'
				// 	},
				// 	is_color_type: false,
				// 	content: [{
				// 			iconPath: '/static/image.png',
				// 			selectedIconPath: '/static/image-active.png',
				// 			text: '玩家',
				// 			active: false
				// 		},
				// 		{
				// 			iconPath: '/static/home.png',
				// 			selectedIconPath: '/static/home-active.png',
				// 			text: '统计',
				// 			active: false
				// 		},
				// 		{
				// 			iconPath: '/static/star.png',
				// 			selectedIconPath: '/static/star-active.png',
				// 			text: '设置',
				// 			active: false
				// 		}
				// 	]
				// },
			}
		},
		computed: {},
		mounted() {},
		onLoad() {
			this.loadData(this.actionId)
		},
		onReady() {
			this.layoutInit()
		},
		onShow() {
			console.log('[onShow]')
			uni.onWindowResize(res => {
				console.log('[onWindowResize]', res)
				this.deviceOrientation = res.deviceOrientation
				console.log('[onWindowResize] deviceOrientation', this.deviceOrientation)

				this.layoutInit()
			});
		},
		beforeDestroy() {
			// console.log("beforeDestroy")
			clearInterval(this.interval)
			leafletHelper.free()
		},
		methods: {
			// 布局初始化 设置地图高度
			layoutInit() {
				this.systemInfo = uni.getSystemInfoSync()
				console.log('[layoutInit] systemInfo', this.systemInfo)
				this.deviceOrientation = this.systemInfo.deviceOrientation
				this.mapHeight = this.systemInfo.windowHeight
			},
			popupToggle() {
				this.popupShow = !this.popupShow

				if (this.deviceOrientation == 'portrait') { // 竖屏 
					console.log('[popupToggle] 竖屏')
					if (this.popupShow) {
						this.mapHeight = this.systemInfo.windowHeight - this.popupHeight
					} else {
						this.mapHeight = this.systemInfo.windowHeight
					}
				} else if (this.deviceOrientation == 'landscape') { // 横屏
					console.log('[popupToggle] 横屏')
					if (this.popupShow) {
						this.mapHeight = this.systemInfo.windowHeight - this.popupHeight
					} else {
						this.mapHeight = this.systemInfo.windowHeight
					}
				}
			},
			async loadData() {
				this.actionDetail = await this.getToActionDetail(this.actionId)
				uni.setNavigationBarTitle({
					title: this.actionDetail.name
				});
				// console.log(this.actionDetail)

				this.initMap()
				this.handleMapDrawRoute()

				if (this.interval != null) {
					clearInterval(this.interval)
				}

				let that = this
				that.players = await that.getToUsersInGameDetail(that.actionId)
				// console.log('players', that.players)
				leafletHelper.global.setPlayers(this.players)

				that.players_position = await that.getToUsersInGameGpsQuery(that.actionId)
				leafletHelper.global.setPlayersPosition(this.players_position)

				that.handleMapDrawPlayer()

				this.interval = setInterval(async function() {

					that.players_position = await that.getToUsersInGameGpsQuery(that.actionId)
					// leafletHelper.global.setPlayers(that.players)
					leafletHelper.global.setPlayersPosition(that.players_position)

				}, 1000);

				// await mapHelper.handleMapInfo(this, this.mapInfo)
				this.handleMapToggle()
			},
			//场控端_活动详情
			async getToActionDetail(actId) {
				try {
					return new Promise((resolve, reject) => {
						// 创建请求参数并赋值
						var request = new IdRequest()
						request.setId(actId)
						// 调用客户端相应的grpc方法，发送grpc请求，并接受后台发送回来的返回值
						this.$client.toActionDetail(request, {}, (err, response) => {
							if (err) {
								console.log(`[toActionDetail] err: code = ${err.code}` +
									`, message = "${err.message}"`)
								reject(err)
							} else {
								let res = response.toObject()
								console.log('[toActionDetail]', res)
								resolve(res)
							}
						})
					});
				} catch (e) {
					console.log('[getToActionDetail] err', e)
					reject(e)
				}
			},
			//场控端_正在进行中所有用户实时信息
			async getToUsersInGameDetail(actId) {
				try {
					return new Promise((resolve, reject) => {
						// 创建请求参数并赋值
						var request = new IdRequest()
						request.setId(actId)
						// 调用客户端相应的grpc方法，发送grpc请求，并接受后台发送回来的返回值
						this.$client.toUsersInGameDetail(request, {}, (err, response) => {
							if (err) {
								console.log(`[toUsersInGameDetail] err: code = ${err.code}` +
									`, message = "${err.message}"`)
								reject(err)
							} else {
								let res = response.toObject()
								// console.log('[toUsersInGameDetail]', res)
								resolve(res.usersList)
							}
						})
					});
				} catch (e) {
					console.log('[getToUsersInGameDetail] err', e)
					reject(e)
				}
			},
			//场控端_正在进行中所有用户实时gps查询
			async getToUsersInGameGpsQuery(actId) {
				try {
					return new Promise((resolve, reject) => {
						// 创建请求参数并赋值
						var request = new IdRequest()
						request.setId(actId)
						// 调用客户端相应的grpc方法，发送grpc请求，并接受后台发送回来的返回值
						this.$client.toUsersInGameGpsQuery(request, {}, (err, response) => {
							if (err) {
								console.log(`[toUsersInGameGpsQuery] err: code = ${err.code}` +
									`, message = "${err.message}"`)
								reject(err)
							} else {
								let res = response.toObject()
								// console.log('[toUsersInGameGpsQuery]', res)
								resolve(res.gpsinfoList)
							}
						})
					});
				} catch (e) {
					console.log('[getToUsersInGameGpsQuery] err', e)
					reject(e)
				}
			},
			initMap() {
				// leafletHelper.init(this, 'map', [36.67175772119628, 117.12792580603369], 17)

				// const mapid = this.actionDetail.mapinfo.lid
				const mapurl = this.actionDetail.mapinfo.mapurl
				const centPoint = [this.actionDetail.mapinfo.centerlatitude, this.actionDetail.mapinfo.centerlongitude]
				const zoomNum = this.actionDetail.mapinfo.defscale
				leafletHelper.init(this, 'map', centPoint, zoomNum)
				leafletHelper.addMapLayer(mapurl)
			},
			handleMapDrawRoute() {
				// leafletHelper.global.setCheckPoints(this.checkPoints)
				leafletHelper.global.setRoutes(this.actionDetail.routesList)

				// leafletHelper.checkPoint.drawAllCheckPoints()
				// leafletHelper.checkPoint.drawPath()
				leafletHelper.route.drawAllRoutes()
				leafletHelper.route.drawAllPath()
			},
			handleMapDrawPlayer() {
				// leafletHelper.global.setPlayers(this.players)
				// leafletHelper.global.setPlayersPosition(this.players_position)

				leafletHelper.player.drawAllPlayers()
				// leafletHelper.player.drawOneTrail(1, 10000, true)
				// leafletHelper.player.drawOneTrail(2, 0, false)
				leafletHelper.player.drawAllTrails(5000)
			},
			handleMapToggle() {
				// leafletHelper.checkPoint.toggle(true)
				leafletHelper.route.toggle(true)
				leafletHelper.player.togglePlayer(true)
				leafletHelper.player.toggleTooltip(true)
				leafletHelper.player.toggleTrail(true)
			},
			trigger(e) {
				console.log(e)
				this.content[e.index].active = !e.item.active
				uni.showModal({
					title: '提示',
					content: `您${this.content[e.index].active ? '选中了' : '取消了'}${e.item.text}`,
					success: function(res) {
						if (res.confirm) {
							console.log('用户点击确定')
						} else if (res.cancel) {
							console.log('用户点击取消')
						}
					}
				})
			},
			fabClick() {
				uni.showToast({
					title: '点击了悬浮按钮',
					icon: 'none'
				})
			},
			//type: 弹出方式 [ top center bottom left right ]
			popup(type) {
				this.type = type
				if (!this.popupShow) {
					this.$refs.popup.open(type)
					this.popupShow = true
				} else {
					this.$refs.popup.close()
					this.popupShow = false
				}
			},
			onPopupChange(e) {
				console.log('[onPopupChange] 当前模式：' + e.type + ', 状态：' + e.show);
			},
		}
	}
</script>

<style lang="scss" scoped>
	.map {
		z-index: 0;
		width: 100vw;
		// height: 95vh;
		display: flex;
		justify-content: center;
		align-items: center;
		background-color: white;
	}

	.fab {
		z-index: 1000;
		width: 20px;
	}

	// @mixin flex {
	// 	/* #ifndef APP-NVUE */
	// 	display: flex;
	// 	/* #endif */
	// 	flex-direction: row;
	// }

	// @mixin height {
	// 	/* #ifndef APP-NVUE */
	// 	height: 100%;
	// 	/* #endif */
	// 	/* #ifdef APP-NVUE */
	// 	flex: 1;
	// 	/* #endif */
	// }

	.popup-bottom {
		width: 100%;
		height: 200px;
	}

	.popup-right {
		// @include height;
		width: 200px;
		height: 100%;
	}
</style>