<template>
	<div class="admin_page">
		<div class="admin_table_search" :style="{ height: isAwayOrUnfold ? '7rem' : '' }">
			<div class="admin_state">
				<div class="admin_state_item">
					<span>Create Time:</span>
					<a-range-picker
						style="width: 250px"
						class="range_picker"
						v-model:value="rangePickerValue"
						:placeholder="[$t('HistoryPage.StartDate'), $t('HistoryPage.EndDate')]"
						valueFormat="YYYY-MM-DD"
					>
						<template #suffixIcon>
							<span class="icon iconfont range_picker_icon icon-rili"></span>
						</template>
					</a-range-picker>
				</div>
				<!-- <div class="admin_state_item">
					<span>Type:</span>
					<a-select v-model:value="userType" size="large" style="width:250px" optionFilterProp="label" :options="state" placeholder="Please select" allowClear show-search></a-select>
				</div> -->
				<div class="admin_state_item">
					<span>Country or Region:</span>
					<a-select
						v-model:value="country"
						:allowClear="true"
						show-search
						style="width: 250px"
						:filter-option="filterOption"
						placeholder="Select Item..."
						max-tag-count="responsive"
						:options="allCountry"
					></a-select>
				</div>
				<div class="admin_state_item">
					<span>Email:</span>
					<!-- <input
                        v-model="email"
                        placeholder="Please enter email"
                        @keydown.enter="gettrialList"
                        type="text"
                        style="width: 250px"
                    /> -->
					<SelectUser v-model="email" labelKey="email" valueKey="email" />
				</div>

				<div class="admin_state_item">
					<span>User Type:</span>
					<a-select
						v-model:value="systemUser"
						size="large"
						style="width: 250px"
						optionFilterProp="label"
						:options="state"
						placeholder="Please select"
						allowClear
						show-search
					></a-select>
				</div>
				<div class="admin_state_item">
					<span>Orgnization:</span>
					<a-select
						v-model:value="organizationId"
						placeholder="Select the organization"
						allow-clear
						style="width: 250px"
						@popupScroll="handleOrganizationScroll"
					>
						<a-select-option
							v-for="item in organizationOptions"
							:key="item.id"
							:value="item.id"
						>
							{{ item.name }}
						</a-select-option>
					</a-select>
				</div>
			</div>
			<div class="admin_search">
				<div
					class="admin_search_item"
					@click="searchHistoryList"
					:style="{ height: isAwayOrUnfold ? '4rem' : '' }"
				>
					Search
				</div>
				<div class="admin_search_item" @click="addhHistoryList">Add</div>
			</div>
			<div class="admin_state_list">
				<div class="admin_state_list_item" @click="lastGeTrialList('year')">
					Nearly a year
				</div>
				<div class="admin_state_list_item" @click="lastGeTrialList('month')">
					Last month
				</div>
				<div class="admin_state_list_item" @click="lastGeTrialList('week')">Last week</div>
			</div>
		</div>
		<div class="awayOrUnfold" :class="{ active: isAwayOrUnfold }">
			<span
				class="icon iconfont menu_icon icon-xiala"
				@click="() => (isAwayOrUnfold = !isAwayOrUnfold)"
			></span>
		</div>
		<div class="admin_table_content" ref="historyTable">
			<a-table
				@resizeColumn="handleResizeColumn"
				:loading="tableLoading"
				:columns="columns"
				:data-source="dataList"
				:scroll="{ y: historyTableHeight }"
				@change="changePage"
				:showSorterTooltip="false"
				:pagination="{
					showSizeChanger: true,
					current: currentPage,
					pageSize: pageSize,
					total: total,
					showQuickJumper: true,
					bordered: false
				}"
			>
				<template #bodyCell="{ column, text, record, index }">
					<div class="operate_list" v-if="column?.Operations">
						<div class="operate_item" @click="setAagree(record)">Edit</div>
						<!-- <div
							class="operate_item"
							@click="deleteGroup(record, index)"
						>
							Delete
						</div> -->
					</div>
				</template>
			</a-table>
		</div>
		<allUserPoerationsVue
			ref="allUserPoerationsVue"
			@searchHistoryList="searchHistoryList"
		/>
	</div>
</template>
<script lang="ts">
import { defineComponent, ref, createVNode, computed, reactive, toRefs, onMounted } from "vue"
import { formatTime } from "@/tool/util"
import { useStore } from "vuex"
import { Https } from "@/tool/https"
import allUserPoerationsVue from "./allUserPoerations.vue"
import SelectUser from "@/component/common/SelectUser.vue"
export default defineComponent({
	components: { allUserPoerationsVue, SelectUser },
	setup() {
		const store: any = useStore()
		let filter: any = reactive({
			dataList: [],
			tableLoading: false,
			allCountry: [],
			isAwayOrUnfold: false
		})
		let filterData: any = reactive({
			rangePickerValue: [],
			currentPage: 1,
			pageSize: 10,
			total: 0,
			country: "",
			email: "",
			userType: "",
			ids: [],
			occupation: "",
			systemUser: "",
			order: "", //'Ascending  升序 Descending 降序'
			orderBy: "",
			userName: "",
			organizationId: null
		})
		let state: any = ref([
			{
				label: "all",
				value: ""
			},
			{
				label: "visitor",
				value: "0"
			},
			{
				label: "yearly",
				value: "1"
			},
			{
				label: "monthly",
				value: "2"
			},
			{
				label: "trial",
				value: "3"
			},
			{
				label: "userInEvent",
				value: "4"
			},
			{
				label: "Edu Admin",
				value: "7"
			}
		])
		let renameData: any = ref({}) //修改名字选中的数据
		const columns: any = computed(() => {
			return [
				{
					title: "User Id",
					align: "center",
					dataIndex: "id",
					key: "id",
					width: 100,
					fixed: "left",
					sorter: true
				},
				{
					title: "Email",
					align: "center",
					dataIndex: "userEmail",
					key: "userEmail",
					width: 200,
					ellipsis: true
				},
				{
					title: "User Name",
					align: "center",
					dataIndex: "userName",
					key: "userName",
					width: 150,
					ellipsis: true
					// customRender: (record: any) => {
					//     let time = formatTime(
					//         record.text / 1000,
					//         "YYYY-MM-DD hh:mm:ss"
					//     );
					//     return time;
					// },
				},
				{
					title: "language",
					align: "center",
					dataIndex: "language",
					key: "language",
					width: 100,
					ellipsis: true
				},
				{
					title: "Valid Start Time",
					align: "center",
					dataIndex: "validStartTime",
					key: "validstartTime",
					width: 200,
					ellipsis: true,
					customRender: (record: any) => {
						let time = ""
						if (record.text) {
							time = formatTime(record.text / 1000, "YYYY-MM-DD hh:mm:ss")
						}
						return time
					}
				},
				{
					title: "Valid End Time",
					align: "center",
					dataIndex: "validEndTime",
					key: "validendTime",
					width: 200,
					ellipsis: true,
					customRender: (record: any) => {
						let time = ""
						if (record.text) {
							time = formatTime(record.text / 1000, "YYYY-MM-DD hh:mm:ss")
						}
						return time
					}
				},
				{
					title: "Country or Region",
					align: "center",
					dataIndex: "country",
					key: "country",
					width: 200
				},
				{
					title: "Create Date",
					align: "center",
					dataIndex: "createDate",
					key: "createDate",
					width: 200,
					sorter: true
				},
				{
					title: "Is Beginner",
					align: "center",
					dataIndex: "isBeginner",
					key: "isBeginner",
					width: 80,
					ellipsis: true,
					customRender: (record: any) => {
						let str
						if (record.value == 1) {
							str = "Yes"
						} else {
							str = "No"
						}
						return str
					}
				},
				{
					title: "Machine Room Ip",
					align: "center",
					dataIndex: "browserIdentifiers",
					key: "browserIdentifiers",
					width: 200
				},
				{
					title: "Credits",
					align: "center",
					// width: 150,
					// minWidth: 100,
					// maxWidth: 200,
					// resizable: true,
					dataIndex: "credits",
					key: "credits",
					width: 100,
					sorter: true
				},
				{
					title: "User Type",
					align: "center",
					// width: 150,
					// minWidth: 100,
					// maxWidth: 200,
					// resizable: true,
					dataIndex: "systemUser",
					key: "systemUser",
					width: 100,
					customRender: (record: any) => {
						let str
						if (record.value == 0) {
							str = "visitor"
						} else if (record.value == 1) {
							str = "yearly"
						} else if (record.value == 2) {
							str = "monthly"
						} else if (record.value == 3) {
							str = "trial"
						} else if (record.value == 4) {
							str = "userInEvent"
						} else if (record.value == 7) {
							str = "Edu Admin"
						}
						return str
					}
				},
				{
					title: "Operations",
					key: "operation",
					width: 120,
					align: "center",
					fixed: "right",
					// slots:{customRender:'action'}
					Operations: true
				}
			]
		})
		//改变页码
		let changePage = (e: any, filters: any, sorter: any) => {
			filterData.currentPage = e.current
			filterData.pageSize = e.pageSize
			if (sorter.order) {
				if (sorter.columnKey == "id") {
					filterData.orderBy = "id"
				} else if (sorter.columnKey == "createDate") {
					filterData.orderBy = "time"
				} else if (sorter.columnKey == "credits") {
					filterData.orderBy = "credits"
				}
			}
			if (sorter.order) {
				filterData.order = sorter.order == "descend" ? "Descending" : "Ascending"
			} else {
				filterData.order = ""
			}
			gettrialList()
		}

		//查询列表
		let searchHistoryList = () => {
			filterData.currentPage = 1
			gettrialList()
		}
		let clearHistoryList = () => {
			;((filterData.rangePickerValue = []),
				(filterData.currentPage = 1),
				(filterData.pageSize = 10),
				(filterData.total = 0),
				(filterData.country = ""),
				(filterData.email = ""),
				(filterData.userType = ""),
				(filterData.ids = []),
				(filterData.occupation = ""),
				(filterData.order = ""), //'Ascending  升序 Descending 降序'
				(filterData.orderBy = ""), //'Ascending  升序 Descending 降序'
				(filterData.systemUser = ""),
				(filterData.userName = ""))
		}
		let setHistoryListData = () => {
			let startDate: any = filterData.rangePickerValue?.[0]
				? filterData.rangePickerValue[0] + " " + "00:00:00"
				: ""
			let endDate: any = filterData.rangePickerValue?.[1]
				? filterData.rangePickerValue[1] + " " + "23:59:59"
				: ""
			let data = {
				endTime: endDate,
				startTime: startDate,
				size: filterData.pageSize,
				page: filterData.currentPage,
				systemUser: filterData.systemUser,
				country: filterData.country,
				email: filterData.email?.trim(),
				userType: filterData.userType,
				ids: filterData.ids,
				occupation: filterData.occupation,
				order: filterData.order,
				orderBy: filterData.orderBy,
				userName: filterData.userName,
				organizationId: filterData.organizationId
			}
			return data
		}
		//获取列表
		let gettrialList = () => {
			filter.tableLoading = true
			let data = setHistoryListData()
			Https.axiosPost(Https.httpUrls.getUserInfo, data).then((rv: any) => {
				if (rv) {
					// this.dataList = rv
					filter.dataList = rv.records
					filterData.total = rv.total
					filter.tableLoading = false

					// this.workspaceItem.position = this.singleTypeList[0].label
				}
			})
		}
		let lastGeTrialList = (str: string) => {
			clearHistoryList()
			let currentDate = new Date()
			let currentTimestamp = Math.floor(currentDate.getTime() / 1000)
			// 计算30天前的时间戳
			let thirtyDaysAgoTimestamp
			if (str == "year") {
				thirtyDaysAgoTimestamp = currentTimestamp - 360 * 24 * 60 * 60
			} else if (str == "month") {
				thirtyDaysAgoTimestamp = currentTimestamp - 30 * 24 * 60 * 60
			} else if (str == "week") {
				thirtyDaysAgoTimestamp = currentTimestamp - 7 * 24 * 60 * 60
			}
			filterData.rangePickerValue[0] = formatTime(thirtyDaysAgoTimestamp, "YYYY-MM-DD")
			gettrialList()
		}
		let filterOption = (input: any, option: any) => {
			// 使用 option.label 进行搜索
			return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
		}
		let addhHistoryList = () => {
			allUserPoerationsVue.value.init("Add", "")
		}
		let allUserPoerationsVue = ref()
		let setAagree = (data: any) => {
			allUserPoerationsVue.value.init("Edit", data)
		}

		const organizationOptions = ref([])
		const organizationParams = reactive({
			page: 1,
			size: 10,
			total: 0
		})
		const organizationLoading = ref(false)
		const getOrganizationList = async (isLoadMore = false) => {
			console.log("111111")
			if (organizationLoading.value) return
			if (isLoadMore) {
				const loaded = organizationParams.page * organizationParams.size
				if (organizationParams.total && loaded >= organizationParams.total) return
				organizationParams.page += 1
			} else {
				organizationParams.page = 1
				organizationOptions.value = []
			}
			organizationLoading.value = true
			try {
				const { total, ...requestParams } = organizationParams
				const rv: any = await Https.axiosPost(
					Https.httpUrls.queryOrganization,
					requestParams
				)
				if (rv) {
					const newRecords = rv.records || []
					// 遍历新数据，如果已存在则覆盖，不存在则追加
					newRecords.forEach((newOrg: any) => {
						const newOrgId = String(newOrg.id)
						const existingIndex = organizationOptions.value.findIndex(
							(org: any) => String(org.id) === newOrgId
						)
						if (existingIndex !== -1) {
							// 如果已存在，用新数据覆盖旧项
							organizationOptions.value[existingIndex] = newOrg
						} else {
							// 如果不存在，追加到末尾
							organizationOptions.value.push(newOrg)
						}
					})
					organizationParams.total = rv.total || 0
				}
			} finally {
				organizationLoading.value = false
			}
		}

		const handleOrganizationScroll = (e: any) => {
			const target = e?.target
			if (!target) return
			const nearBottom = target.scrollTop + target.clientHeight >= target.scrollHeight - 20
			if (nearBottom) {
				getOrganizationList(true)
			}
		}

		onMounted(() => {
			let allCountry: any = sessionStorage.getItem("allCountry")
			if (allCountry) {
				filter.allCountry = JSON.parse(allCountry)
			}
			gettrialList()
			getOrganizationList()
		})
		return {
			...toRefs(filter),
			...toRefs(filterData),
			state,
			columns,
			renameData,
			changePage,
			searchHistoryList,
			addhHistoryList,
			lastGeTrialList,
			gettrialList,
			filterOption,
			allUserPoerationsVue,
			setAagree,
			handleOrganizationScroll,
			getOrganizationList,
			organizationOptions,
			organizationParams
		}
	},
	data() {
		return {
			historyTableHeight: 0,
			handleResizeColumn: (w: any, col: any) => {
				col.width = w
			}
		}
	},
	mounted() {
		let historyTable: any = this.$refs.historyTable
		this.historyTableHeight = historyTable.clientHeight - 200
	},
	methods: {}
})
</script>
<style lang="less" scoped>
.admin_page .admin_table_search .admin_state {
	display: flex;
	flex-wrap: wrap;
}
.admin_page {
}
</style>
