export default {
	_caller: null, // 调用方指针
	
	// *** 非指针复制 *** 
	storePlayers: [{
		id: 0, // 玩家ID
		marker: null, // 玩家标识
		trail: null, // 玩家轨迹
		trailData: [], // 玩家轨迹信息（数据会追加并定时清理过期数据）
		interval_creatCircleMarker: null,
		interval_showTrail: null,
	}],
	
	map: null,
	map_layer: null,
	
	players: [], // 玩家信息（指针复制 每次grpc获取数据后之前旧数据会丢弃）
	players_position: [], // 玩家当前位置信息（指针复制 每次grpc获取数据后之前旧数据会丢弃）
	
	focusPlayerId: 0, // 当前选中的玩家ID
	checkPoints: [], // 检查点列表（指针复制 每次grpc获取数据后之前旧数据会丢弃）
	routes: [], // 路线列表（指针复制 每次grpc获取数据后之前旧数据会丢弃）
	
	init() {
		this._caller = null
		this.storePlayers.length = 0 // 清空数组
		this.map = null
		this.map_layer = null
		this.players.length = 0 // 清空数组
		this.players_position.length = 0 // 清空数组
		this.focusPlayerId = 0
		this.checkPoints.length = 0 // 清空数组
		this.routes.length = 0 // 清空数组
	},
	setCaller(data) {
		this._caller = data // 指针复制，是同一个对象
	},
	setPlayers(data) {
		this.players = data // 指针复制，是同一个对象
	},
	setPlayersPosition(data) {
		this.players_position = data // 指针复制，是同一个对象
	},
	// *** 非指针复制 *** 
	// storePlayersTrail(data) {
	// 	this.storePlayers.trail.push(data)
	// },
	setCheckPoints(data) {
		this.checkPoints = data // 指针复制，是同一个对象
	},
	setRoutes(data) {
		this.routes = data // 指针复制，是同一个对象
	},
	getPlayerById(playerId) {
		if (!(playerId > 0)) return
	
		var player = null
		if (this.players != null && this.players.length > 0) {
			player = this.players.find(o => o.id === playerId)
		}
		// console.log("[getPlayerById]", playerId, player)
		return player
	},
	getPlayerPositionById(playerId) {
		if (!(playerId > 0)) return
	
		var player_position = null
		if (this.players_position != null && this.players_position.length > 0) {
			player_position = this.players_position.find(o => o.id === playerId)
		}
		// console.log("[getPlayerPositionById]", playerId, player_position)
		return player_position
	},
	getStorePlayersById(playerId) {
		if (!(playerId > 0)) return
	
		var storePlayer = null
		if (this.storePlayers != null && this.storePlayers.length > 0) {
			storePlayer = this.storePlayers.find(o => o.id === playerId)
		}
		// console.log("[getStorePlayersById]", playerId, storePlayer)
		return storePlayer
	},
	getCheckPointById(cpId) {
		if (!(cpId > 0)) return
	
		var checkPoint = null
		if (this.checkPoints != null && this.checkPoints.length > 0) {
			checkPoint = this.checkPoints.find(o => o.cp_id === cpId)
		}
		// console.log("[getCheckPointById]", cpId, checkPoint)
		return checkPoint
	},
	getRouteById(rtId) {
		if (!(rtId > 0)) return
	
		var route = null
		if (this.routes != null && this.routes.length > 0) {
			route = this.routes.find(o => o.id === rtId)
		}
		// console.log("[getCheckPointById]", rtId, route)
		return route
	},
	// 处理过期数据
	dealStaleData() {
		for (let i = 0; i < this.storePlayers.length; i++) {
			var storePlayer = this.storePlayers[i]
	
			if (storePlayer == null || !(storePlayer.id > 0)) {
				continue
			}
	
			// 查找最新的玩家记录列表
			var player = this.getPlayerById(storePlayer.id)
			if (player == null) { // 未找到 说明记录已过期
				// console.warn('[dealStaleData] 发现过期数据', storePlayer)
	
				if (storePlayer.marker != null) {
					storePlayer.marker.removeFrom(storePlayer.markerLayerGroup)
					storePlayer.marker = null
				}
	
				if (storePlayer.trail != null) {
					storePlayer.trail.removeFrom(storePlayer.trailLayerGroup)
					storePlayer.trail2.removeFrom(storePlayer.trailLayerGroup)
					storePlayer.trail = null
					storePlayer.trail2 = null
					storePlayer.trailData = []
				}
	
				if (storePlayer.interval_creatCircleMarker != null) {
					clearInterval(storePlayer.interval_creatCircleMarker)
				}
	
				if (storePlayer.interval_creatCircleMarker != null) {
					clearInterval(storePlayer.interval_showTrail)
				}
				
				// delete删除元素之后数组长度不变，只是被删除元素被置为empty
				// delete this.storePlayers[i] 
			}
		}
	},
}
