<template>
    <div class="admin_page">
        <div class="admin_table_search">
            <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:</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"
                    />
                </div>
                <div class="admin_state_item">
                    <span>User Name:</span>
                    <a-select
                        v-model:value="ids"
                        mode="multiple"
                        style="width: 250px"
                        :filter-option="filterOption"
                        placeholder="Select Item..."
                        max-tag-count="responsive"
                        :options="allUserList"
                        @keydown.enter="gettrialList"
                    ></a-select>
                </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>
            <div class="admin_search">
                <div class="admin_search_item" @click="searchHistoryList">
                    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="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"></allUserPoerationsVue>
    </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";
export default defineComponent({
    components: {allUserPoerationsVue,},
    setup() {
        const store:any = useStore()
        let filter: any = reactive({
            dataList: [],
            tableLoading: false,
            allUserList: computed(()=>{
				return store.state.adminPage.allUserList
			}),
			allCountry:[]
        });
        let filterData: any = reactive({
            rangePickerValue: [],
            currentPage: 1,
            pageSize: 10,
            total: 0,
            country: "",
            email: "",
            userType: "",
            ids: [],
            occupation: "",
            systemUser: "",
            order: "", //'Ascending  升序 Descending 降序'
			orderBy:'',
            userName: "",
        });
        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",
            },
        ]);
        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,
                },
                {
                    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;
                    },
                },
                {
                    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'
				}
			}
			filterData.order = sorter.order == "descend" ? "Descending" : "Ascending";

            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,
            };
            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)
		}
        onMounted(() => {
			let allCountry: any = sessionStorage.getItem("allCountry");
            if (allCountry) {
                filter.allCountry = JSON.parse(allCountry);
            }
            gettrialList();
        });
        return {
            ...toRefs(filter),
            ...toRefs(filterData),
            state,
            columns,
            renameData,
            changePage,
            searchHistoryList,
            addhHistoryList,
            lastGeTrialList,
            gettrialList,
            filterOption,
			allUserPoerationsVue,
			setAagree,
        };
    },
    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;
}
</style>