// material-ui
import {
    Grid,
    Typography,
    Stack,
    Button,
} from '@mui/material';
import * as React from "react";
import * as HttpUtils from "utils/HttpUtils";
import { useNavigate } from "react-router-dom";
import FpsIcon from "assets/images/icons/fps.svg";
import { useLocation } from 'react-router-dom';
import {paymentPath} from "auth/utils";
// import {poll} from "utils/Utils";

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

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 location = useLocation();

    const [locationData, setLocationData] = React.useState({});
    const [paymentData, setPaymentData] = React.useState({});
    const [onReady, setOnReady] = React.useState(true);
    
    const [responeData, setResponeDataData] = React.useState({});
    const [fpsTransctionData, setFpsTransctionData] = React.useState({});
    const [fpsmerchanttimeoutdatetime, setFpsmerchanttimeoutdatetime] = React.useState("");
    const [timeDownCount, setTimeDownCount] = React.useState(0);
    const [paymentId, setPaymentId] = React.useState("");
    const [fpsqrcodeurl, setFpsqrcodeurl] = React.useState("");
    const [browserType, setBrowserType] = React.useState("");
    const mobileBrowser = "Mobile";
     const desktopBrowser = "Desktop";
    // const pasgPath = 'https://fps.payapps.hkicl.com.hk'; //PRD
    // const pasgPath = 'https://sim.fps.payapps.hkicl.com.hk'; //Testing
    // const loadPaymentUrl = "/api/payment/wallet/fps";
    const cancelPaymentUrl = "/api/payment/cancelpayment";
    const paymentStatusApi = "/api/payment/status/";
    // const payloadUrl = "/api/payment/wallet/fps/enquiryfpspayload/";
    // const receiverUrl = "/noti-api/payment/payment-notification";
    const pasgPath = 'https://sim.fps.payapps.hkicl.com.hk'; //Testing
    // const pasgPath = 'https://fps.payapps.hkicl.com.hk'; //PRD
    //timer
    const openPASGUrl = pasgPath + '?pay_req_obj=' + encodeURIComponent("http://127.0.0.1:8080/api/payment/wallet/fps/enquiryfpspayload/vm.JKDDlTOavR3ASviSwUnS1Lw4-") + '&callback='
		+ encodeURIComponent("https://"+window.location.hostname+ '/paymentPage/fps/fpscallback?TRANSACTION_ID='+transactionid+"&WEB_TOKEN="+webtoken);

    const currentTimer = React.useRef();
    const [time, setTime] = React.useState(0);

    React.useEffect(() => {
        // console.log (location.state)
        if (/Android|webOS|iPhone|iPad|iPod|Opera Mini/i.test(navigator.userAgent)) {
            console.log('Mobile web browser');
            setBrowserType(mobileBrowser)
            setFpsqrcodeurl(openPASGUrl)
            console.log(openPASGUrl)
            // renderOpenFPSPaymentAppTemplate(openPASGUrl, $('#openFPSPaymentAppTemplate').html());
        } else {
            console.log('Desktop web browser');
            setBrowserType(desktopBrowser)
            const parsedUrl = new URL("http://127.0.0.1:8080/api/payment/wallet/fps/enquiryfpspayload/vm.JKDDlTOavR3ASviSwUnS1Lw4-");
            console.log(parsedUrl)
            const fpsqrcodeurl = parsedUrl.pathname;
            console.log(fpsqrcodeurl)
            console.log(openPASGUrl)
            setFpsqrcodeurl(openPASGUrl)
        }
        if (location.state!=null){
            if(Object.keys(location.state).length > 0){
                console.log (location.state)
                setLocationData(location.state)
            }
        }
    }, []);

    React.useEffect(() => {
        // console.log (locationData)
        if (Object.keys(locationData).length > 0){
            setPaymentData(locationData)
            // loadForm();
        }
    }, [locationData]);

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

    React.useEffect(() => {
        // console.log(responeData)
        if(Object.keys(responeData).length > 0 && fpsmerchanttimeoutdatetime!=""){
            setFpsTransctionData(responeData)
        }
    }, [responeData]);

    React.useEffect(() => {
        // console.log(fpsTransctionData)
        if(Object.keys(fpsTransctionData).length > 0 ){
            setOnReady(true);
            setPaymentId(fpsTransctionData.paymentid)
            currentTimer.current = setInterval(() => {
                setTime((prevTime) => prevTime + 1);
            }, 1000);
            return () => clearInterval(currentTimer.current);
        }
    }, [fpsTransctionData]);


    const loadForm = () => {
        const timeoutdatetime = "2023-12-07T09:04:30Z[UTC]"
        const convertedDateString = timeoutdatetime.replace("[UTC]", "");
        setFpsmerchanttimeoutdatetime(convertedDateString)
        setPaymentid("C202310268000681")
        setPaymentstatuscode("INPR")
        const responseData= 
        {
            "paymentid": "<paymentid>",
            "paymentstatus": "<paymentstatus>",
            "fpsmerchanttimeoutdatetime": "<fpsmerchanttimeoutdatetime>",
            "fpsqrcodeimgbase64": "<fpsqrcodeimgbase64>",
            "fpsqrcodeurl": "<fpsqrcodeurl>"
        }
        setResponeDataData(responseData)
        // localStorage.removeItem("transactionid")
        // localStorage.removeItem("webtoken")
        // localStorage.setItem("transactionid", paymentData.transactionid)
        // localStorage.setItem("webtoken", paymentData.webtoken)

        // HttpUtils.post({
        //     url: paymentPath+loadPaymentUrl,
        //     params:{
        //         "transactionid": paymentData.transactionid,
        //         "webtoken": paymentData.webtoken,
        //         "paymentmethod":"04,BCFP,FPS",
        //         "order": { 
        //             "totalamount":paymentData.amount,
        //             "currency":"HKD",
        //             "orderdetail": 
        //             [ 
        //                 { 
        //                     "itemid": "1",
        //                     "qty":"1",
        //                     "unitprice":paymentData.amount,
        //                     "amount":paymentData.amount
        //                 },
        //             ]
        //         },
        //         // "locale":"<locale>",
        //         // "eserviceid":"<eserviceid>"
        //     },
        //     onSuccess: function(responseData){
        //         /*
        //             {
        //                 "paymentid": "<paymentid>",
        //                 "paymentstatus": "<paymentstatus>",
        //                 "fpsmerchanttimeoutdatetime": <fpsmerchanttimeoutdatetime>,
        //                 "fpsqrcodeimgbase64": "<fpsqrcodeimgbase64>",
        //                 "fpsqrcodeurl": "<fpsqrcodeurl>"
        //             }
        //         */
        //        setResponeDataData(responseData)
        //        const timeoutdatetime = responseData.fpsmerchanttimeoutdatetime
        //        const convertedDateString = timeoutdatetime.replace("[UTC]", "");
        //        setFpsmerchanttimeoutdatetime(convertedDateString)
        //     //    const parsedUrl = new URL(responseData.fpsqrcodeurl);
        //     //    const fpsqrcodeurl = parsedUrl.pathname;
        //     //    const openPASGUrl = pasgPath + '?pay_req_obj=' + encodeURIComponent(responseData.fpsqrcodeurl) + '&callback='
        //     //                     + encodeURIComponent(paymentPath + payment.config.fpscallbackPage);
        //     //    setFpsqrcodeurl(openPASGUrl)
                    
                
        //     }
        // });
        
    }

    const getPaymentStatus = () => {
        if(Object.keys(paymentData).length > 0){
            HttpUtils.post({
                url: paymentPath+paymentStatusApi+paymentData.transactionid,
                params:{
                    "apprefid": paymentData.transactionid,
                    "webtoken": paymentData.webtoken,   
                },
                onSuccess: function(responseData){
                    const paymentstatuscode = responseData.paymentdetail.result.paymentstatuscode;
                    if (paymentstatuscode != "" && paymentstatuscode != "INPR" ){
                        if (paymentstatuscode === 'APPR') {
                            // const timestamp = Date.now();
                            navigate('/paymentPage/fps/ackpage');
                        } else if (paymentstatuscode === 'CANC') {
                            // const timestamp = Date.now();
                            navigate('/paymentPage/fps/ackpage');
                        } else {
                            // window.top.location.href = paymentPath + payment.config.errPagePath;
                            alert("ERROR")
                        }
                    }
                },
                onError: function(){
                    cancelPayment()
                    // clearInterval(currentTimer.current);
                }
            });
        }
    };
    
    React.useEffect(() => {
        const timeOutDate = new Date(fpsmerchanttimeoutdatetime);
        const currentTime = new Date;
        const timedowncount = Math.round((timeOutDate.getTime() - currentTime.getTime()) / 1000);
        setTimeDownCount(timedowncount);
        // console.log(time)
        // console.log(timeOutDate)
        // console.log(currentTime)
        // console.log(timeOutDate.getTime()-currentTime.getTime())
        getPaymentStatus();
        if (timeOutDate.getTime()<currentTime.getTime()){
            console.log("stop");
            clearInterval(currentTimer.current);
            cancelPayment()
        }
    },[time])

    const cancelPayment = ()=>{
        if (Object.keys(paymentData).length>0){
            HttpUtils.post({
                url: paymentPath+cancelPaymentUrl,
                params:{
                    "transactionid": paymentData.transactionid,
                    "webtoken": paymentData.webtoken,
                    "paymentid": fpsTransctionData.paymentid
                },
                onSuccess: function(){
                    navigate('/paymentPage/fps/ackpage');
                }
            });       
        }
    }

    const mobliePayment = ()=>{
        window.location.assign(fpsqrcodeurl);
    }

    return (
        !onReady ?
            <LoadingComponent />
            :
            (
                <Grid container sx={{ minHeight: '110vh', backgroundColor: '#fff' }} direction="column" justifyContent="flex-start" alignItems="center" >
                    <Grid 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="publicNoticePaymentFPSPay"/>
                                </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={12} >

                                    <Typography variant="h3" sx={{ ml: 8, mt: 4, mr: 8, textAlign: "center" }}>
                                        <img src={FpsIcon} width="80" height="80" alt="FPS"></img>
                                        <br />
                                            <FormattedMessage id="payFee"/>
                                        <br />
                                        {"$HK " + paymentData.amount}
                                    </Typography>

                                    
                                    {browserType==mobileBrowser?
                                        <Typography variant="h3" sx={{ ml: 8, mt: 4, mr: 8, textAlign: "center" }}>
                                            <Button
                                                component="span"
                                                variant="contained"
                                                size="large"
                                                color="primary"
                                                onClick={()=>{
                                                    mobliePayment();
                                                }}
                                                sx={{ m: 4 }}
                                            >請選擇支付程式付款</Button>
                                        </Typography>:
                                        <Typography variant="h3" sx={{ ml: 8, mt: 4, mr: 8, textAlign: "center" }}>
                                            請掃描以下二維碼
                                            <br />
                                            <img src={fpsTransctionData.fpsqrcodeimgbase64} alt="QR Code"/>
                                            <br />
                                            {paymentId}
                                            <br/>
                                            二維碼有效期限3分鐘
                                            <br />
                                            請在限規定時間內完成付款流程
                                            <br />
                                            {"剩餘時間:"+timeDownCount}
                                        </Typography>
                                    }
                                    <Typography variant="h3" sx={{ ml: 8, mt: 4, mr: 8, textAlign: "center" }}>
                                        <Button
                                            component="span"
                                            variant="contained"
                                            size="large"
                                            color="error"
                                            onClick={()=>{
                                                cancelPayment();
                                            }}
                                            sx={{ m: 4 }}
                                        >
                                            <FormattedMessage id="payCancel"/>
                                        </Button>
                                    </Typography>
                                </Grid>
                            </center>
                        </Grid>
                    </Grid>
                    {/*row 2*/}
                </Grid >
            )


    );
};

export default Index;
