<template>
	<view class="container">
		<view class="header-box">
			<view class="search-box">
				<u-search v-model="searchForm.keyword" :clearabled="true" bg-color="#E5E5E5"
					:input-style="searchInputStyle" placeholder="搜索您想要的内容" @search="toSearch"
					@custom="toSearch"></u-search>
			</view>
			<view class="tab-box" style="padding: 40rpx 0 35rpx;">
				<u-tabs name="label" :list="searchType" :is-scroll="true" v-model="searchForm.type"
					@change="onSearchTypeChange" font-size="32" :bold="false" inactive-color="#000000"
					:bar-style="{'background-color': '#2979ff'}" :gutter="40" :show-bar="false" duration="0" height="55"
					active-color="#ffffff"
					:active-item-style="{'background-color': '#2979ff', 'border-radius':'30rpx'}"></u-tabs>
			</view>
		</view>
		<u-empty mode="data" v-if="list.length === 0" iconSize="120" textSize="58" text="暂无数据" margin-top="50">
		</u-empty>
		<view class="list-box">
			<view class="list-item-box" v-for="item in list" :key="item.id" @click="onClickReport(item)">
				<view class="image-box">
					<image :src="item.cover" mode="aspectFill"></image>
				</view>
				<view class="info-box" style="width: 100%;">
					<view class="title">
						{{item.title}}
					</view>
					<view class="type">
						<span>{{item.type}}</span>
					</view>
					<view class="func">
						<!-- 如果是免费，直接显示免费 -->
						<view v-if="item.viewMode==='1'" class="func-box" style="justify-content: flex-end;">
							<view class="button free">免费</view>
						</view>
						<view v-else-if="item.viewMode==='2' && isMember" class="func-box">
							<view class="price">￥{{ item.price }}元</view>
							<view class="button member-free">会员免费</view>
						</view>
						<view v-else-if="item.viewMode==='2' && !isMember" class="func-box">
							<view style="flex: 0 0 auto;display: flex;align-items: center;">
								<view class="member-free">
									会员免费
								</view>
								<view class="not-member-price">
									非会员：￥{{item.price}}元
								</view>
							</view>
							<view :class="['button', item.hasBuy ? 'free' : 'buy']">
								{{item.hasBuy ? '已购买' : '立即购买'}}
							</view>
						</view>
						<view v-else-if="item.viewMode==='3' && item.price===item.priceMember" class="func-box">
							<view class="price">￥{{ item.price }}元</view>
							<view :class="['button', item.hasBuy ? 'free' : 'buy']">
								{{item.hasBuy ? '已购买' : '立即购买'}}
							</view>
						</view>
						<view v-else-if="item.viewMode==='3' && item.price!==item.priceMember" class="func-box">
							<view style="flex: 0 0 auto;display: flex;align-items: center;">
								<view class="member-free">
									{{`会员：${item.priceMember}元`}}
								</view>
								<view class="not-member-price">
									非会员：￥{{item.price}}元
								</view>
							</view>
							<view :class="['button', item.hasBuy ? 'free' : 'buy']">
								{{item.hasBuy ? '已购买' : '立即购买'}}
							</view>
						</view>
					</view>
				</view>
			</view>
		</view>
		<u-loadmore v-if="list.length !==0 && status !== 'nomore'" :status="status" margin-top="20" margin-bottom="20"
			@loadmore="loadmore" />
	</view>
</template>

<script setup>
	import {
		ref,
		computed
	} from 'vue'
	import {
		onLoad,
		onReachBottom
	} from '@dcloudio/uni-app'
	import {
		loadReportList
	} from '@/api/report.js'
	import {
		useReportStore
	} from '@/store/reportStore.js'
	import {
		useAuthStore
	} from '@/store/authStore.js'
	const reportStore = useReportStore();
	const authStore = useAuthStore();

	const customButtonStyle = {
		height: '40rpx',
		lineHeight: '40rpx',
		padding: '0 30rpx'
	}

	const searchInputStyle = {
		backgroundColor: '#E5E5E5'
	}
	const isMember = ref(false);
	const categoryList = ref({});
	const pageNum = ref(1);
	const pageSize = ref(10);
	const count = ref(0);
	const model = ref(null);
	const status = ref('loadmore');

	const searchType = ref([{
		label: '全部',
		value: ' '
	}])
	// 对应tab的code
	const currentType = ref(null);

	function onSearchTypeChange(val) {
		currentType.value = searchType.value[val].value;
		pageNum.value = 1;
		search(searchForm.value.keyword, 1, model.value, currentType.value);
	}
	const searchForm = ref({
		keyword: '',
		type: 0
	})

	const modelName = ref()

	const list = ref([])

	const listFilter = ref([])

	function onClickReport(report) {
		uni.navigateTo({
			url: `/pages/reportDetail/reportDetail?id=${report.id}&title=${report.title}`
		})
	}

	function init() {
		searchForm.value.keyword = '';
		pageNum.value = 1
		search('', 1, model.value, currentType.value)
	}

	function search(keyword, pageNumber, model, type, pageSize) {
		status.value = 'loading'
		const form = {
			keyword,
			model,
			type,
			pageNumber,
			pageSize: pageSize ? pageSize : 10
		}

		loadReportList(form).then(res => {
			// console.log(res)
			if (res.code === 0) {
				if (pageNumber === 1) {
					list.value = res.data
				} else {
					list.value = [...list.value, ...res.data];
				}
				pageNum.value = pageNumber + 1;
				count.value = res.count;
				if (list.value.length === count.value) {
					status.value = 'nomore'
				} else {
					status.value = 'loadmore'
				}
			}
		}).catch(() => {
			status.value = 'loadmore'
		})
	}

	function loadmore() {
		if (list.value.length === count.value) {
			return
		}
		search(searchForm.value.keyword, pageNum.value, model.value, currentType.value);
	}

	function toSearch() {
		search(searchForm.value.keyword, 1, model.value, currentType.value);
	}

	onReachBottom(() => {
		loadmore()
	})

	onLoad((load) => {
		isMember.value = authStore.userInfo.isMember === '0' ? false : true;
		if (load.model) {
			// console.log(load, reportStore.reportCate , "传过来的值")
			searchType.value = reportStore.reportCate[load.model].child;

			modelName.value = load.model
			model.value = load.value

			currentType.value = searchType.value[0].value;

			uni.setNavigationBarTitle({
				title: modelName.value
			})
			init()
		}
	})
</script>
<style>
	::v-deep(.u-tab-item) {
		margin-right: 20rpx;
	}
</style>
<style lang="scss">
	$image-width: 230rpx;
	$image-height: 180rpx;
	.container {
		// height: 100vh;
		width: 100vw;
		background-color: $uni-text-color-inverse;

		.header-box {
			padding: 0 20rpx;
			background-color: $uni-text-color-inverse;
			@include topMagnet();
		}

		.search-box {
			// margin-bottom: 20rpx;

			::v-deep(.u-search) {
				background-color: #e5e5e5;
				border-radius: 50rpx;

				.u-action {
					width: 18%;
					background-color: $uni-color-primary;
					border-radius: 50rpx;
					color: $uni-text-color-inverse;
					margin-right: 8rpx;
					font-size: 28rpx;
					line-height: 50rpx;
					letter-spacing: 3rpx;
					text-align: center;
				}
			}
		}

		.list-box {
			padding: 0 20rpx;

			.list-item-box {
				padding: 30rpx 20rpx;
				display: flex;
				gap: 20rpx;
				// height: 210rpx;
				border-bottom: 5rpx solid #E6E6E6;

				&:first-child {
					padding: 0 20rpx 30rpx;
				}

				&:active {
					background-color: $uni-bg-color-hover;
				}

				.image-box {
					width: $image-width;
					height: $image-height;

					image {
						width: $image-width;
						flex: 0 0 $image-width;
						height: 100%;
						border-radius: $uni-card-border-radius;
					}
				}

				.info-box {
					width: 100%;
					.title {
						font-size: $uni-title-font-size-2;
						font-weight: bold;
						line-height: 40rpx;
						margin-bottom: 15rpx;
						@include text-line-overflow(2);
					}

					.type {
						font-size: $uni-font-size-2;

						.iconfont {
							font-size: $uni-font-size-2;
							padding-right: 10rpx;
						}
					}

					.func {
						display: flex;
						justify-content: space-between;
						align-items: flex-end;
						font-size: $uni-font-size-2;
						font-weight: bold;
						margin-top: 10rpx;

						.func-box {
							display: flex;
							justify-content: space-between;
							width: 100%;
							align-items: center;
						}

						.button {
							text-align: center;
							width: 130rpx;
						}

						.price {
							color: $uni-color-error;
							font-size: $uni-title-font-size-3;
						}

						.not-member-price {
							font-size: $uni-font-size-4;
							color: $uni-text-color-grey;
							text-align: end;
						}

						.buy {
							padding: 6rpx 25rpx;
							background-color: $uni-color-error;
							border-radius: $uni-card-border-radius;
							color: $uni-text-color-inverse;
						}

						.free {
							padding: 6rpx 25rpx;
							background-color: $uni-color-primary;
							border-radius: $uni-card-border-radius;
							color: $uni-text-color-inverse;
						}

						.member-free {
							padding: 10rpx 20rpx;
							@include backgroundImg('https://www.gzrea.cn/wxmp/static/icon/bg-label.png');
							color: $uni-text-color;
						}
					}
				}
			}
		}
	}
</style>