<template>
	<view class="content">
		<!-- <search :Fixed="true" /> -->
		<map
			id="map"
			:longitude="longitude"
			@markertap="markerClick"
			@callouttap="markerClick"
			@regionchange="regionchange"
			height="90"
			width="90"
			:markers="markList"
			:latitude="latitude"
			class="map_content"
		>
			<cover-view slot="callout">
				<template v-for="(item, index) in markList">
					<cover-view class="callout" :marker-id="item.id">
						<cover-view class="callout_item">
							<cover-image class="callout_item_img" src="/static/icon/mc.png"></cover-image>
							<cover-view class="callout_item_view">闲 {{ item.gunUseCount || 0 }}/{{ item.gunCount || 0 }}</cover-view>
						</cover-view>
					</cover-view>
				</template>
			</cover-view>
		</map>

		<uni-transition ref="mapLocationRef" :show="true">
			<view class="map-location" @click="mapLocation">
				<image src="/static/icon/location-marker-icon.png" mode="widthFix"></image>
			</view>
		</uni-transition>

		<uni-transition modeClass="fade" :show="mapBox">
			<view class="map_box">
				<orderList toNav :Image="true" :info="infoDz" :list="infoDz.pictures" />
			</view>
		</uni-transition>
		<cc-myTabbar :tabBarShow="1"></cc-myTabbar>
		<!-- <tabbar path="/pages/index/index"></tabbar> -->
	</view>
</template>

<script setup>
import { ref } from 'vue';
import { onLoad } from '@dcloudio/uni-app';
import { aroundAreaMap, infoAroundApi } from '@/api/api.js';

let longitude = ref(113.675688);
let latitude = ref(34.75527700365562);
let mapContext = ref(null);
let mapBox = ref(false);
let mapLocationRef = ref();

let infoDz = ref([]);

let markList = ref([]);

onLoad(async () => {
	// #ifndef MP-WEIXIN
	uni.hideTabBar();
	// #endif
	mapContext.value = uni.createMapContext('map');
	const { longitude: lon, latitude: lat } = await uni.getLocation({
		type: 'gcj02' // 根据实际需要选择坐标系
	});
	latitude.value = lat;
	longitude.value = lon;
	getInfo();
	setTimeout(() => {
		mapLocation();
	}, 300);
});

let getInfo = async () => {
	let _res = await aroundAreaMap({
		orderByType: 1,
		lat: latitude.value,
		lon: longitude.value
	});

	let list = _res.map((item, index) => {
		return {
			id: item.id,
			longitude: item.location.lng,
			latitude: item.location.lat,
			iconPath: '/static/icon/marker-pointer.png',
			width: 20,
			height: 23,
			content: '2',
			gunUseCount: item.gunUseCount,
			gunCount: item.gunCount,
			distance: item.distance,
			customCallout: {
				display: 'ALWAYS', // 显示方式
				anchorX: 0, // 锚点X轴
				anchorY: -10 // 锚点Y轴
			}
		};
	});
	list.unshift({
		longitude: longitude.value,
		latitude: latitude.value,
		iconPath: '/static/icon/my-location-default.png',
		width: 45,
		height: 45,
		id: -1
	});
	markList.value = list;
};

const mapLocation = () => {
	const log = longitude.value;
	const lat = latitude.value;
	mapContext.value.moveToLocation({
		longitude: log,
		latitude: lat
	});
};

// 地图缩放移动触发
const regionchange = (e) => {
	// 地图移动手松开结束触发type:end
	if (e.type == 'end') {
		console.log(e);
		console.log(e.detail.scale);
		mapBox.value = false;
		mapLocationRefStep(false);
	}
};

// marker点击事件
const markerClick = async (e) => {
	console.log(e, 'eeeeeee');

	if (e.markerId == -1) {
		return;
	}
	uni.showLoading();
	let _res = await infoAroundApi({
		id: e.markerId
	});

	let markerInfo = markList.value.find((val) => val.id == e.markerId);
	let data = _res?.priceList?.find((val) => val.isCurrent == 1);

	infoDz.value = {
		..._res,
		distance: markerInfo.distance,
		priceAmount: data.totalAmount
	};

	console.log(infoDz, 'infoDzinfoDz');
	// infoDz.value.priceAmount = data.totalAmount;
	// infoDz.value.distance = data.distance;
	uni.hideLoading();
	mapBox.value = true;
	mapLocationRefStep(true);
};

const mapLocationRefStep = (type) => {
	if (type) {
		mapLocationRef.value.step(
			{
				translateY: '-200rpx'
			},
			{
				timingFunction: 'ease-in',
				duration: 100
			}
		);
	} else {
		mapLocationRef.value.step(
			{
				translateY: '0rpx'
			},
			{
				timingFunction: 'ease',
				duration: 500
			}
		);
	}
	mapLocationRef.value.run();
};
</script>

<style lang="scss">
.map_content {
	width: 750rpx;
	height: 100vh;
	/* #ifdef MP-ALIPAY */
	height: calc(100vh - 100upx);
	/* #endif */
}

.map-location {
	width: 90rpx;
	height: 90rpx;
	background-color: #fff;
	position: fixed;
	left: 30rpx;
	bottom: 570rpx;
	border-radius: 20rpx;
	display: flex;
	align-items: center;
	justify-content: center;
	box-shadow: 0 5px 11px rgba(0, 0, 0, 0.2);

	image {
		width: 45rpx;
		height: 45rpx;
	}
}

.callout {
	box-sizing: border-box;
	background: rgba(15, 75, 203, 0.26);
	border-radius: 15rpx 15rpx 15rpx 0;
	padding: 10rpx 15rpx;
	@include flex($direction: column);
	&_item {
		@include flex;
		font-weight: bold;
		font-size: 28rpx;
		color: #ffffff;
		box-sizing: border-box;
		&_img {
			width: 40rpx;
			height: 40rpx;
			margin-right: 15rpx;
		}
	}
	&_item:nth-child(1) {
		margin-bottom: 15rpx;
	}
}

.recharge {
	width: 690rpx;
	background-color: #fff;
	min-height: 300rpx;
	position: fixed;
	left: 30rpx;
	bottom: 250rpx;
	border-radius: 20rpx;
	padding: 20rpx;
	box-shadow: 0 5px 11px rgba(0, 0, 0, 0.2);

	&_title {
		font-size: 36rpx;
		margin-bottom: 20rpx;
	}

	&_con {
		font-size: 26rpx;
	}
}

.map_box {
	width: 690rpx;
	position: fixed;
	left: 30rpx;
	bottom: 230rpx;
	z-index: 999;
}
</style>
