<template>
	<up-popup :show="show" mode="bottom" @close="close" :round="10" :closeable="true">
		<view class="popup-container">
			<view class="popup-title">宠物服务时间列表</view>
			<view class="pet-list">
				<!-- 宠物列表循环 -->
				<view class="pet-item" v-for="(pet, petIndex) in petList" :key="pet.id">
					<view class="pet-info">
						<up-image class="pet-avatar" width="50px" height="50px" :src="pet.photo" shape="circle"></up-image>
						<view class="pet-details">
							<view class="pet-name">{{ pet.name }}</view>
							<view class="pet-breed">{{ pet.breed }} {{ pet.bodyType }}</view>
						</view>
					</view>
					
					<!-- 该宠物的服务时间列表 -->
					<view class="service-list">
						<view class="service-item" v-for="(service, index) in pet.services" :key="index">
							<view class="service-header">
								<view class="service-date">{{ service.serviceDate }}</view>
								<view class="service-time">{{ getServiceTimeText(service.expectServiceTime) }}</view>
							</view>
							<view class="service-products">
								<view class="product-item" v-for="(product, pIndex) in service.products" :key="pIndex">
									<view class="product-name">{{ product.productName }}</view>
									<!-- <view class="product-price">￥{{ product.salePrice }}</view> -->
								</view>
							</view>
							<view class="service-footer">
								<up-button 
                                type="primary" 
                                text="打卡" 
                                @click="handleClock(service)" 
                                shape="circle" 
                                size="mini" 
                                style="height: 60rpx;"
                                color="#FFAA48"></up-button>
							</view>
						</view>
					</view>
				</view>
			</view>
		</view>
	</up-popup>
</template>

<script setup>
import { ref, defineProps, defineEmits } from 'vue';

const props = defineProps({
	show: {
		type: Boolean,
		default: false
	},
	orderData: {
		type: Object,
		default: () => ({})
	}
});

const emit = defineEmits(['close']);
const petList = ref([]);

// 关闭弹窗
const close = () => {
	emit('close');
};

// 获取服务时间段文本
const getServiceTimeText = (timeCode) => {
	const timeMap = {
		'MORNING': '早上',
		'AFTERNOON': '下午',
		'EVENING': '晚上'
	};
	return timeMap[timeCode] || '未指定';
};

// 处理打卡事件
const handleClock = (service) => {
	if (!props.orderData || !service) return;

    let url = `/otherPages/myOrdersManage/clock/index?id=${props.orderData.orderId}&itemID=${props.orderData.id}&serviceId=${service.id}&isRead=true`

    if(service){

    }
	
	uni.navigateTo({
		url,
	});
};

// 处理数据，将订单数据转换为按宠物分组的服务时间列表格式
const processOrderData = (orderData) => {
	if (!orderData || !orderData.h5OrderVO) return [];
	
	const { orderServiceList, orderItemList, petVOList } = orderData.h5OrderVO;
	if (!orderServiceList || !orderItemList || !petVOList) return [];
	
	// 按宠物ID分组
	const petMap = {};
	
	// 先将宠物信息添加到映射中
	petVOList.forEach(pet => {
		petMap[pet.id] = {
			...pet,
			services: []
		};
	});
	
	// 按服务日期和宠物ID组织数据
	const serviceMap = {};
	
	// 遍历服务列表，创建日期和宠物ID的映射
	orderServiceList.forEach(service => {
		const serviceId = service.id;
		const petId = service.petId;
		const serviceDate = service.serviceDate;
		const expectServiceTime = service.expectServiceTime;
		
		if (!serviceMap[serviceId]) {
			serviceMap[serviceId] = {
				id: serviceId,
				petId,
				serviceDate,
				expectServiceTime,
				products: []
			};
		}
	});
	
	// 遍历订单项，将产品添加到对应的服务日期中
	orderItemList.forEach(item => {
		const serviceId = item.orderServiceId;
		if (serviceMap[serviceId]) {
			serviceMap[serviceId].products.push({
				productName: item.productName,
				salePrice: item.salePrice,
				pic: item.pic,
				quantity: item.quantity,
				spData: item.spData ? JSON.parse(item.spData) : {}
			});
		}
	});
	
	// 将服务添加到对应的宠物中
	Object.values(serviceMap).forEach(service => {
		if (petMap[service.petId]) {
			petMap[service.petId].services.push(service);
		}
	});
	
	// 转换为数组格式并按日期排序每个宠物的服务
	const result = Object.values(petMap);
	result.forEach(pet => {
		pet.services.sort((a, b) => new Date(a.serviceDate) - new Date(b.serviceDate));
	});
	
	return result;
};

// 更新服务列表数据
const updateServiceList = () => {
	if (props.orderData && props.orderData.h5OrderVO) {
		petList.value = processOrderData(props.orderData);
	}
};

// 暴露方法给父组件
defineExpose({
	updateServiceList
});
</script>

<style scoped lang="scss">
.popup-container {
	padding: 30rpx;
	max-height: 70vh;
	overflow-y: auto;
}

.popup-title {
	font-size: 32rpx;
	font-weight: bold;
	text-align: center;
	margin-bottom: 30rpx;
}

.pet-list {
	.pet-item {
		margin-bottom: 40rpx;
		
		.pet-info {
			display: flex;
			align-items: center;
			margin-bottom: 20rpx;
			
			.pet-avatar {
				flex-shrink: 0;
				margin-right: 20rpx;
			}
			
			.pet-details {
				.pet-name {
					font-size: 28rpx;
					font-weight: bold;
					color: #333;
				}
				
				.pet-breed {
					font-size: 24rpx;
					color: #666;
					margin-top: 6rpx;
				}
			}
		}
	}
}

.service-list {
	.service-item {
		margin-bottom: 20rpx;
		background-color: #f8f8f8;
		border-radius: 12rpx;
		padding: 20rpx;
		
		.service-header {
			display: flex;
			justify-content: space-between;
			align-items: center;
			margin-bottom: 20rpx;
			padding-bottom: 10rpx;
			border-bottom: 1px solid #eee;
			
			.service-date {
				font-size: 28rpx;
				font-weight: bold;
				color: #333;
			}
			
			.service-time {
				font-size: 24rpx;
				color: #666;
				background-color: #f0f0f0;
				padding: 4rpx 12rpx;
				border-radius: 20rpx;
			}
		}
		
		.service-products {
			margin-bottom: 20rpx;
			
			.product-item {
				display: flex;
				justify-content: space-between;
				padding: 10rpx 0;
				
				.product-name {
					font-size: 26rpx;
					color: #666;
				}
				
				.product-price {
					font-size: 26rpx;
					color: #FF530A;
				}
			}
		}
		
		.service-footer {
			display: flex;
			justify-content: flex-end;
		}
	}
}
</style>