<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: 230px"
                        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>Status:</span>
                    <a-select
                        v-model:value="selectStatus"
                        size="large"
                        style="width: 230px"
                        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" style="width: auto;padding: 0 2rem;" @click="deleteInBatches">
					Delete In Batches
				</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"
				:row-selection="rowSelection"
				rowKey="id"
                :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)"
							style="margin-right: 2rem;"
                        >
                            Edit
                        </div>
						<div
                            class="operate_item"
                            @click="deleteAagree(record)"
                        >
                            Delete
                        </div>
                        <!-- <div
							class="operate_item"
							@click="deleteGroup(record, index)"
						>
							Delete
						</div> -->
                    </div>
                </template>
            </a-table>
        </div>
		<editReferral ref="editReferral" :stateList="[...state].filter((_, index) => ![0,3].includes(index))" @searchHistoryList="searchHistoryList"></editReferral>
    </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 { Modal,message } from 'ant-design-vue';
import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
import editReferral from "./editReferral.vue";
export default defineComponent({
    components: {editReferral,},
    setup() {
        const store:any = useStore()
		const selectedRowKeys = ref([]) as any;
		const onSelectChange = (changableRowKeys: string[]) => {
			selectedRowKeys.value = changableRowKeys;
		};
        let filter: any = reactive({
            dataList: [],
            tableLoading: false,
			rowSelection:computed(() => {
				return {
					selectedRowKeys: unref(selectedRowKeys),
					onChange: onSelectChange,
				}
			})
        });
        let filterData: any = reactive({
            rangePickerValue: [],
            currentPage: 1,
            pageSize: 10,
            total: 0,
			selectStatus:'',
			affiliateId:'',
        });
        let state: any = ref([
            {
                label: "all",
                value: "",
            },
            {
				label:'Paid',
				value:'Paid',
			},
			{
				label:'Unpaid',
				value:'Unpaid',
			},
			{
				label:'Pending',
				value:'Pending',
			},
			{
				label:'Accept',
				value:'Accept',
			},
            {
                label: "Rejected",
                value: "Rejected",
            },
        ]);
        let renameData: any = ref({}); //修改名字选中的数据
        const columns: any = computed(() => {
            return [
                {
                    title: "Id",
                    align: "center",
                    dataIndex: "id",
                    key: "id",
					width:100,
                    fixed: "left",
                },
                {
                    title: "Commission",
                    align: "center",
                    dataIndex: "commission",
                    key: "commission",
					width:200,
					ellipsis:true,
					customRender: (record: any) => {
						
						return `${record.text}%`

                    },
                },
                {
                    title: "User Name",
                    align: "center",
                    dataIndex: "affiliateName",
                    key: "affiliateName",
					width:150,
					ellipsis:true
                    // customRender: (record: any) => {
                    //     let time = formatTime(
                    //         record.text / 1000,
                    //         "YYYY-MM-DD hh:mm:ss"
                    //     );
                    //     return time;
                    // },
                },
                {
                    title: "Payment Info Id",
                    align: "center",
                    dataIndex: "paymentInfoId",
                    key: "paymentInfoId",
					width:100,
					ellipsis:true,
                },
                {
                    title: "Create Time",
                    align: "center",
                    dataIndex: "createTime",
                    key: "createTime",
					width:200,
                },
				{
                    title: "Status",
                    align: "center",
                    dataIndex: "status",
                    key: "status",
					width:200,
                },
                {
                    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;
            gettrialList();
        };

        //查询列表
        let searchHistoryList = () => {
            filterData.currentPage = 1;
            gettrialList();
        };
        let clearHistoryList = () => {
            filterData.rangePickerValue = []
			filterData.currentPage = 1
			filterData.pageSize = 10
			filterData.total = 0
			filterData.selectStatus = ''
			filterData.affiliateId = ''
        };
        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,
				status: filterData.selectStatus,
				affiliateId: filterData.affiliateId,
            };
            return data;
        };
        //获取列表
        let gettrialList = () => {
            filter.tableLoading = true;
            let data = setHistoryListData();
            Https.axiosPost(Https.httpUrls.getReferrals, data).then(
                (rv: any) => {
                    if (rv) {
						console.log(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 editReferral = ref()
		let setAagree = (data:any) =>{
			editReferral.value.init('Edit',data)
		}
		const confirmDelete = ()=>{
			return new Promise<void>((resolve, reject) => {
				Modal.confirm({
					title: 'Are you sure you want to delete this item?',
					icon: createVNode(ExclamationCircleOutlined),
					okText: 'Yes',
					cancelText: 'No',
					centered:true,
					onOk() {
						resolve(true)
					},
					onCancel(){
						resolve(false)
					}
				});
			})
		}
		const deleteInBatches = async ()=>{
			if(selectedRowKeys.value.length == 0)return
			let boolean:any = await confirmDelete()
			if(!boolean){
				return
			}
			Https.axiosPost(Https.httpUrls.batchDeleteReferral,selectedRowKeys.value)
			.then((rv:any)=>{
				gettrialList();
			})
		}
		const deleteAagree = async (event:any)=>{
			let boolean:any = await confirmDelete()
			if(!boolean){
				return
			}
			Https.axiosPost(Https.httpUrls.batchDeleteReferral,[event.id])
			.then((rv:any)=>{
				gettrialList();
			})
		}
        onMounted(() => {
            gettrialList();
        });
        return {
            ...toRefs(filter),
            ...toRefs(filterData),
            state,
            columns,
            renameData,
            changePage,
            searchHistoryList,
            lastGeTrialList,
            gettrialList,
            filterOption,
			editReferral,
			setAagree,
			deleteInBatches,
			deleteAagree,
        };
    },
    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;
	width: 75%;
    flex-wrap: wrap;
	align-content: flex-start;
}
.admin_page .admin_table_search .admin_search {
    display: flex;
    flex-wrap: wrap;
	width: 25%;
}
</style>