<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>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="countryList"
                    ></a-select>
                </div>
				<div class="admin_state_item">
                    <span>City:</span>
					<a-select
                        v-model:value="city"
						:allowClear="true"
						show-search
                        style="width: 250px"
                        :filter-option="filterOption"
                        placeholder="Select Item..."
                        max-tag-count="responsive"
                        :options="cityList"
                    ></a-select>
                </div>
                <div class="admin_state_item">
                    <span>Payment Amount:</span>
                    <input
                        v-model="payerTotal"
                        placeholder="Please enter payment amount"
                        @keydown.enter="gettrialList"
                        type="text"
                        style="width: 250px"
                    />
                </div>
                <div class="admin_state_item">
                    <span>platform:</span>
                    <a-select
                        v-model:value="platform"
                        size="large"
                        style="width: 250px"
                        optionFilterProp="label"
                        :options="platformList"
                        placeholder="Please select"
                        allowClear
                        show-search
                    ></a-select>
                </div>
				<div class="admin_state_item">
                    <span>Status:</span>
                    <a-select
                        v-model:value="status"
                        size="large"
                        style="width: 250px"
                        optionFilterProp="label"
                        :options="statusList"
                        placeholder="Please select"
                        allowClear
                        show-search
                    ></a-select>
                </div>
				<div class="admin_state_item">
                    <span>Type:</span>
                    <a-select
                        v-model:value="type"
                        size="large"
                        style="width: 250px"
                        optionFilterProp="label"
                        :options="articleCategoryList"
                        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="downloadTransaction">
                    Export
                </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 v-if="record.status == 'Success'" :class="{success:record.status == 'Success'}">
							<i class="fi fi-ss-check-circle"></i>{{ record.status }}
						</div>
						<div v-if="record.status == 'Pending'" :class="{pending:record.status == 'Pending'}">
							<i class="fi fi-br-hourglass-end"></i>{{ record.status }}
						</div>
						<div v-if="record.status == 'Fail'" :class="{fail:record.status == 'Fail'}">
							<i class="fi fi-ss-cross-circle"></i>{{ record.status }}
						</div>
                    </div>
                </template>
            </a-table>
        </div>
    </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 {getCookie,clonAllCookie} from '@/tool/cookie'
export default defineComponent({
    components: {},
    setup() {
        const store:any = useStore()
        let filter: any = reactive({
            dataList: [],
            tableLoading: false,
			allCountry:[],
			cityList: computed(()=>{
				return store.state.adminPage.city
			}),
			countryList: computed(()=>{
				return store.state.adminPage.country
			}),
        });
        let filterData: any = reactive({
            rangePickerValue: [],
            currentPage: 1,
            pageSize: 10,
            total: 0,
            country: "",
			city:"",
            payerTotal: "",
            platform: "",
            order: "", //'Ascending  升序 Descending 降序'
			orderBy:'',
			status: "",
			type: "",
        });
		let selectList=reactive({
			platformList:[
				{
					label: "all",
					value: "",
				},
				{
					label:'PayPal',
					value:'PayPal',
				},
				{
					label:'Stripe',
					value:'Stripe',
				},
				{
					label:'Alipay-HK',
					value:'Alipay-HK',
				},
			],
			statusList:[
				{
					label: "all",
					value: "",
				},
				{
					label:'Success',
					value:'Success',
				},
				{
					label:'Fail',
					value:'Fail',
				},
				{
					label:'Pending',
					value:'Pending',
				},
			],
			articleCategoryList:[
				{
					label: "all",
					value: "",
				},
				{
					label:'new',
					value:'new',
				},
				{
					label:'renewal',
					value:'renewal',
				},
				{
					label:'credits',
					value:'credits',
				},
			],
		})
        let renameData: any = ref({}); //修改名字选中的数据
        const columns: any = computed(() => {
            return [
                {
                    title: "Id",
                    align: "center",
                    dataIndex: "id",
                    key: "id",
					width:100,
                    fixed: "left",
					sorter: true,
                },
				{
                    title: "Payer",
                    align: "center",
                    dataIndex: "payer",
                    key: "payer",
					width:150,
					ellipsis:true,
                },
				{
                    title: "Platform",
                    align: "center",
                    dataIndex: "platform",
                    key: "platform",
					width:150,
					ellipsis:true,
                },{
                    title: "Payment Amount",
                    align: "center",
                    dataIndex: "payerTotal",
                    key: "payerTotal",
					width:150,
					ellipsis:true,
                },
				{
                    title: "Type",
                    align: "center",
                    dataIndex: "type",
                    key: "type",
					width:150,
					ellipsis:true,
                },
				{
                    title: "Payment Method",
                    align: "center",
                    dataIndex: "paymentMethod",
                    key: "paymentMethod",
					width:150,
					ellipsis:true,
                },
				{
                    title: "last4",
                    key: "last4",
					width:120,
                    align: "center",
                    dataIndex: "last4",
                    // slots:{customRender:'action'}
                },
                // {
                //     title: 'User Type',
                //     align: "center",
                //     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: "City",
                    align: "center",
                    dataIndex: "city",
                    key: "city",
					width:150,
					ellipsis:true
                },
				{
                    title: "Country",
                    align: "center",
                    dataIndex: "country",
                    key: "country",
					width:150,
					ellipsis:true
                },
                {
                    title: "Create Time",
                    align: "center",
                    dataIndex: "createTime",
                    key: "createTime",
					width:150,
					ellipsis:true,
                },
                {
                    title: "Status",
                    align: "center",
                    dataIndex: "status",
                    key: "status",
                    fixed: "right",
					width:150,
                    Operations: true,
					ellipsis: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" ? "DESC" : "ASC";

            gettrialList();
        };

        //查询列表
        let searchHistoryList = () => {
            filterData.currentPage = 1;
            gettrialList();
        };
        let clearHistoryList = () => {
            filterData.rangePickerValue = [],
			filterData.currentPage = 1,
			filterData.pageSize = 10,
			filterData.total = 0,
			filterData.city = "",
			filterData.country = "",
			filterData.payerTotal = ""
			filterData.order = "" //'Ascending  升序 Descending 降序'
			filterData.orderBy = "" //'Ascending  升序 Descending 降序'
			filterData.platform = ""
			filterData.status = ""
			filterData.type = ""
        };
        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"
                : "";
				console.log(startDate);
				
            let data = {
                order: filterData.order,
                orderBy: filterData.orderBy,
				"city": filterData.city,
				"country": filterData.country,
                startTime: startDate,
                endTime: endDate,
				"id": 0,
                page: filterData.currentPage,
				"payerTotal": filterData.payerTotal,
				"platform": filterData.platform,
                size: filterData.pageSize,
				"status": filterData.status,
				"type": filterData.type
            };
            return data;
        };
        //获取列表
        let gettrialList = () => {
            filter.tableLoading = true;
            let data = setHistoryListData();
            Https.axiosPost(Https.httpUrls.queryTransaction, data).then(
                (rv: any) => {
                    if (rv) {
						console.log(rv);
						
                        // this.dataList = rv
                        filter.dataList = rv.content;
                        filterData.total = rv.total;
                        filter.tableLoading = false;

                        // this.workspaceItem.position = this.singleTypeList[0].label
                    }
                }
            );
        };
		//导出报表
        let downloadTransaction = () => {
            filter.tableLoading = true;
            let data = setHistoryListData();
			Https.axiosPost(Https.httpUrls.queryTransactionDownload, data).then(
                (rv: any) => {
                    if (rv) {
						fetch(rv)
						.then(response => response.blob())  // 将响应转换为 Blob 对象
						.then(blob => {
						// 创建一个指向 Blob 对象的 URL
						const link = document.createElement('a');
						link.href = URL.createObjectURL(blob);  // 将 Blob 对象转换为可下载的 URL
						link.download = 'transaction';  // 设置文件名
						filter.tableLoading = false;
						link.click();  // 触发下载
						URL.revokeObjectURL(link.href);  // 释放 URL 对象
						})
                    }
                }
            );
        };
        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"
            // );
			filterData.rangePickerValue = [formatTime(thirtyDaysAgoTimestamp,'YYYY-MM-DD'),formatTime(currentTimestamp,'YYYY-MM-DD')]

            gettrialList();
        };
		let filterOption = (input: any, option: any) => {
            // 使用 option.label 进行搜索
            return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0;
        };
        onMounted(() => {
			let allCountry: any = sessionStorage.getItem("allCountry");
            if (allCountry) {
                filter.allCountry = JSON.parse(allCountry);
            }
            gettrialList();
        });
        return {
            ...toRefs(filter),
            ...toRefs(filterData),
            ...toRefs(selectList),
            columns,
            renameData,
            changePage,
            searchHistoryList,
            lastGeTrialList,
            gettrialList,
			downloadTransaction,
			filterOption,
        };
    },
    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;
}
:deep(.operate_list){
	.fi{
		font-size: 2rem;
		margin-right: 1rem;
	}
	.success{
		.fi-ss-check-circle{
			color: #3ab45c;
		}
	}
	.pending{
		.fi-ss-check-circle{
			color: #ffc628;
		}
	}
	.fail{
		.fi-ss-check-circle{
			color: #ff0000;
		}
	}
}
</style>