// material-ui
import {
    Grid,
    Typography,
    Stack,
    Box
    // Button,
    // FormLabel,
} from '@mui/material';
import * as React from "react";
import * as HttpUtils from "utils/HttpUtils";
import * as UrlUtils from "utils/ApiPathConst";
//import { useNavigate } from 'react-router-dom';
import { paymentPath } from "auth/utils";
import * as DateUtils from "utils/DateUtils"

import Loadable from 'components/Loadable';
const LoadingComponent = Loadable(React.lazy(() => import('pages/extra-pages/LoadingComponent')));
const PaymentDetails = Loadable(React.lazy(() => import('./Details_Public/PaymentDetails')));
const DataGrid = Loadable(React.lazy(() => import('./Details_Public/DataGrid')));

import titleBackgroundImg from 'assets/images/dashboard/gazette-bar.png'
import {FormattedMessage} from "react-intl";
const BackgroundHead = {
    backgroundImage: `url(${titleBackgroundImg})`,
    width: '100%',
    height: '100%',
    backgroundSize: 'contain',
    backgroundRepeat: 'no-repeat',
    backgroundColor: '#0C489E',
    backgroundPosition: 'right'
}

// ==============================|| DASHBOARD - DEFAULT ||============================== //

const Index = () => {
    //const navigate = useNavigate()
    const [responeData, setResponeDataData] = React.useState({});

    const [paymentData, setPaymentData] = React.useState({});
    const [itemList, setItemList] = React.useState([]);
    const [paymentId, setPaymentId] = React.useState("");

    const [transactionData, setTransactionData] = React.useState({});
    // const [transactionDate, setTransactionDate] = React.useState("");
    // const [transactionTime, setTransactionTime] = React.useState("");
    const [onReady, setOnReady] = React.useState(false);
    const updatePaymentApi = "/api/payment/updatepayment";
    const paymentStatusApi = "/api/payment/status/";


    React.useEffect(() => {
        loadForm();
    }, []);

    React.useEffect(() => {
        console.log(responeData)
        if (Object.keys(responeData).length > 0) {
            setTransactionData(responeData)
        }
    }, [responeData]);

    React.useEffect(() => {
        console.log(transactionData)
        if (Object.keys(transactionData).length > 0) {
            setOnReady(true);
        }
    }, [transactionData]);

    const loadForm = () => {
        // const date = new Date();
        // const trnDate = date.getDate() + "/" + date.getMonth() + "/" + date.getFullYear();
        // const trnTime = date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds();
        // setTransactionDate(trnDate)
        // setTransactionTime(trnTime)
        const params = new URLSearchParams(window.location.search);
        let transactionid = params.get("TRANSACTION_ID")
        let receipt_token = params.get("RECEIPT_TOKEN").replace("%3D", "=")

        HttpUtils.post({
            url: paymentPath + updatePaymentApi,
            params: {
                "transactionid": transactionid,
                "receipttoken": receipt_token,
            },
            onSuccess: function () {
                //     {
                //         "amount": 999.99,
                //         "currencycode": "HKD",
                //         "paymentdetail": {
                //             "attemptno": 1,
                //             "channel": "MobileWallet",
                //             "paymentid": "C202310268000681",
                //             "paymentmethod": "04",
                //             "result": {
                //                 "canretry": "Y",
                //                 "description": "CANC - Cancelled by user or Payment Server.",
                //                 "paymentstatuscode": "CANC",
                //                 "rejectreasoncode": "Payment Cancelled. [PAY-E-9022]"
                //             },
                //             "subtype": "FPS",
                //             "time": "2023-10-26T09:02:17Z[UTC]"
                //         },
                //         "transactionid": "20231026170103921"
                //     }
                // )

                HttpUtils.post({
                    url: paymentPath + paymentStatusApi + transactionid,
                    params: {
                        "apprefid": transactionid,
                        "webtoken": localStorage.getItem("webtoken"),
                    },
                    onSuccess: function (responseData) {
                        setResponeDataData(responseData)
                        if (responseData.paymentdetail?.result?.paymentstatuscode === "APPR") {
                            localStorage.removeItem("webtoken");
                            localStorage.removeItem("transactionid");
                        }
                        HttpUtils.post({
                            url: UrlUtils.PAYMENT_SAVE,
                            params: {
                                id: localStorage.getItem("paymentId"),
                                transNo: responseData.transactionid,
                                transDateTime: new Date(responseData.paymentdetail.time).toISOString(),
                                egisRefNo: responseData.paymentdetail.paymentid,
                                status: responseData.paymentdetail.result.paymentstatuscode,
                                payload: responseData
                            },
                            onSuccess: function (responseData2) {
                                responseData2.data["transDateStr"] = DateUtils.dateFormat(responseData2.data.transDateTime, "DD/MM/YYYY");
                                responseData2.data["transTimeStr"] = DateUtils.dateFormat(responseData2.data.transDateTime, "HH:mm:ss");
                                setItemList(responseData2.paymentItemList)
                                setPaymentData(responseData2.data);
                                localStorage.removeItem("paymentId");
                                setPaymentId(responseData2.id)
                            }
                        });
                    }
                });
            }
        });
    }

    const doPrint = () => {
        // window.print();
        HttpUtils.fileDownload({
            url: UrlUtils.GEN_PAYMENT_RECEIPT+"/"+paymentId,
        });
    };

    return (
        !onReady ?
            <Grid container sx={{ minHeight: '95vh', mb: 3 }} direction="column" justifyContent="center" alignItems="center">
                <Grid item>
                    <LoadingComponent />
                </Grid>
            </Grid>
            :
            transactionData.paymentdetail?.result?.paymentstatuscode === "APPR" ?
                (
                    <div>
                        <style>
                            {`@media print {.printHidden{display: none;} .printOrder{order:-1 !important;}`}
                        </style>
                        <Grid container className="printheight" sx={{ minHeight: '80%', backgroundColor: '#fff' }} direction="column" justifyContent="flex-start" alignItems="center">
                            <Grid className="printHidden" item xs={12} width="100%">
                                <div style={BackgroundHead} width="100%">
                                    <Stack direction="row" height='70px'>
                                        <Typography ml={15} color='#FFF' variant="h4" sx={{ pt: 2 }}>
                                            <FormattedMessage id="publicNoticePaymentSuccess"/>
                                        </Typography>
                                    </Stack>
                                </div>
                            </Grid>
                            {/*row 1*/}
                            <Grid item xs={12} md={12} spacing={2} sx={{ textAlign: "center" }}>
                                <Typography variant="h3" sx={{ ml: 8, mt: 4, mr: 8, textAlign: "center" }}>
                                    您的申請和付款已收到
                                </Typography>
                                <Grid container justifyContent="center" direction="column" spacing={2} sx={{ p: 2 }} alignitems="stretch" >
                                    <Grid item className="printOrder" xs={12} md={12} sx={{ pt: 2 }} style={{ height: '100%', order: 1 }}>
                                        <Box xs={12} md={12} sx={{ border: '3px solid #eee', borderRadius: '10px' }} >
                                            <PaymentDetails
                                                formData={paymentData}
                                                doPrint={doPrint}
                                                style={{
                                                    display: "flex",
                                                    height: "100%",
                                                    flex: 1
                                                }}
                                            />
                                        </Box>
                                    </Grid>
                                    <Grid item xs={12} md={12} sx={{ pt: 1, pb: 2 }} style={{ height: '100%', order: 2 }}>
                                        <Box xs={12} md={12} sx={{ border: '3px solid #eee', borderRadius: '10px' }} >
                                            <DataGrid
                                                recordList={itemList}
                                            />
                                        </Box>
                                    </Grid>
                                </Grid>
                            </Grid>
                            {/*row 2*/}
                        </Grid >
                    </div>
                ) :
                (transactionData.paymentdetail?.result?.paymentstatuscode === "CANC" ?
                    <div>
                        <style>
                            {`@media print {.printHidden{display: none;} .printOrder{order:-1 !important;}`}
                        </style>
                        <Grid container className="printheight" sx={{ minHeight: '80%', backgroundColor: '#fff' }} direction="column" justifyContent="flex-start" alignItems="center" >
                            <Grid className="printHidden" item xs={12} width="100%">
                                <div style={BackgroundHead} width="100%">
                                    <Stack direction="row" height='70px'>
                                        <Typography ml={15} color='#FFF' variant="h4" sx={{ pt: 2 }}>
                                            <FormattedMessage id="publicNoticePaymentCancel"/>
                                        </Typography>
                                    </Stack>
                                </div>
                            </Grid>
                            {/*row 1*/}
                            <Grid item xs={12} md={12} >
                                <Grid container justifyContent="flex-start" alignItems="center" >
                                    <center>
                                        <Grid item xs={12} md={8} >
                                            <Typography variant="h5" sx={{ ml: 8, mt: 4, mr: 8, textAlign: "left" }}>
                                                付款取消訊息：
                                                <br /><br />
                                                您的付款已被取消。我們收到了您的付款請求，但由於某些原因，付款無法完成。請注意以下事項：
                                                <br /><br />
                                                如果您主動取消了支付，請確認並確保取消是您的意願。
                                                <br />
                                                如果付款被取消是由於系統問題或其他原因，請您嘗試以下解決方法：
                                                <br /><br />
                                                檢查您的支付帳戶是否有任何異常或限制。
                                                <br />
                                                確保您的付款資訊準確無誤。
                                                <br />
                                                檢查您的網路連線是否正常。
                                                <br /><br />
                                                如果您需要進一步的協助或有任何疑問，請隨時與我們聯繫，我們將盡快解決您的付款問題。謝謝！
                                            </Typography>
                                        </Grid>
                                    </center>
                                </Grid>
                            </Grid>
                            {/*row 2*/}
                        </Grid >
                    </div>
                    :
                    <div>
                        <style>
                            {`@media print {.printHidden{display: none;} .printOrder{order:-1 !important;}`}
                        </style>
                        <Grid container className="printheight" sx={{ minHeight: '80%', backgroundColor: '#fff' }}direction="column" justifyContent="flex-start" alignItems="center" >
                            <Grid className="printHidden" item xs={12} width="100%">
                                <div style={BackgroundHead} width="100%">
                                    <Stack direction="row" height='70px'>
                                        <Typography ml={15} color='#FFF' variant="h4" sx={{ pt: 2 }}>
                                            <FormattedMessage id="publicNoticePaymentFail"/>
                                        </Typography>
                                    </Stack>
                                </div>
                            </Grid>
                            {/*row 1*/}
                            <Grid item xs={12} md={12} >
                                <Grid container justifyContent="flex-start" alignItems="center" >
                                    <center>
                                        <Grid item xs={12} md={8} >

                                            <Typography variant="h5" sx={{ ml: 8, mt: 4, mr: 8, textAlign: "left" }}>
                                                付款失敗訊息：
                                                <br /><br />
                                                親愛的用戶，很遺憾地告訴您，您的付款操作未成功。我們在處理您的付款時遇到了問題。請您仔細檢查以下事項：
                                                <br /><br />
                                                您的支付帳戶餘額是否足夠。
                                                <br />
                                                您提供的付款資訊是否準確無誤。
                                                <br />
                                                請檢查您的網路連線是否正常。
                                                <br /><br />
                                                如果您已確認以上問題無誤，但付款失敗，請您嘗試以下解決方法：
                                                <br /><br />
                                                嘗試使用其他付款方式進行付款。
                                                <br />
                                                檢查您的支付帳戶是否有異常或限制。
                                                <br />
                                                聯絡我們的客服人員尋求協助。
                                                <br /><br />
                                                如果您需要進一步的協助或有任何疑問，請隨時與我們聯繫。非常抱歉給您帶來不便，我們將盡快解決您的付款問題。謝謝！
                                            </Typography>

                                        </Grid>
                                    </center>
                                </Grid>
                            </Grid>
                            {/*row 2*/}
                        </Grid >
                    </div>
                )
    );
};

export default Index;
