<template>
    <div class="recentNewUser admin_page">
		<div class="admin_table_search">
			<div class="admin_state">
			
				<div class="admin_state_item">
					<span>State Time:</span>
					<a-range-picker
						style="width:280px"
						class="range_picker"
						v-model:value="rangePickerValue"
						:allowClear="false"
						: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="systemUser" size="large" style="width:280px" optionFilterProp="label" :options="state" placeholder="Please select" allowClear show-search></a-select>
				</div>
			</div>
			<div class="admin_search">
				<div class="admin_search_item" @click="searchHistoryList">Search</div>
			</div>
			<div class="admin_state_list">
				<div class="admin_state_list_item" @click="lastGeTrialList('year')">Last 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="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,
				}"
			>
			</a-table>
		</div>
    </div>
</template>
<script lang="ts">
import { defineComponent, ref, createVNode, computed, reactive, toRefs, onMounted } from "vue";
import { formatTime } from "@/tool/util";
import { Https } from "@/tool/https";
export default defineComponent({
    components: {
    },
    setup() {
        let filter:any =  reactive({
			dataList:[],
			tableLoading:false,
		})
		let filterData:any = reactive({
			rangePickerValue:[],
			currentPage: 1,
            pageSize: 10,
            total: 0,
			systemUser:'',
			order: "", //'Ascending  升序 Descending 降序'
			orderBy:'',
		})
		let state:any = ref([
			{
				label:'all',
				value:'',
			},
			{
				label:'visitor',
				value:'0',
			},
			{
				label:'yearly',
				value:'1',
			},
			{
				label:'monthly',
				value:'2',
			},
			{
				label:'trial',
				value:'3',
			},
		])
        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",
                    align: "center",
                    dataIndex: "country",
                    key: "country",
					width:100,
                },
                {
                    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,
					sorter: true,
                },
                {
                    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";
                        }
                        return str;
                    },
                },
            ];
        });
		//改变页码
        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'
				}
			}
			filterData.order = sorter.order == "descend" ? "Descending" : "Ascending";
            gettrialList();
        }

        //查询列表
        let searchHistoryList = ()=> {
            filterData.currentPage = 1;
            gettrialList();
        }

		//获取列表
        let gettrialList = () =>{
			filter.tableLoading = true
			let startDate: any = filterData.rangePickerValue?.[0]
                ? filterData.rangePickerValue[0]+' '+'00:00:00'
                : "";
            let endDate: any = filterData.rangePickerValue?.[1]
                ? filterData.rangePickerValue[1]+' '+'00:00:00'
                : "";
			let data = {
				endTime:endDate,
				startTime:startDate,
				size:filterData.pageSize,
				page:filterData.currentPage,
				systemUser:filterData.systemUser,
				order: filterData.order,
                orderBy: filterData.orderBy,
			}
			Https.axiosPost(Https.httpUrls.recentNewUser,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)=>{
			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 = [formatTime(thirtyDaysAgoTimestamp,'YYYY-MM-DD'),formatTime(currentTimestamp,'YYYY-MM-DD')]
			gettrialList();
		}
		onMounted(()=>{
			lastGeTrialList('month')
		})
        return {
			...toRefs(filter),
			...toRefs(filterData),
			state,
            columns,
            renameData,
			changePage,
			searchHistoryList,
			lastGeTrialList,
			gettrialList,
        };
    },
    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>
