<template>
    <div class="overlay" v-if="visible">
        <div class="content"
            :style="{
                height: dialogHeight + 'px',
                width: showComType != 'preview' ? '600px' : 'auto'}">   
            <div class="pop-mask"  
                v-show="showCurrencyPop" 
                @click.stop="showCurrencyPop = false"></div>
            <!-- 头部 -->
            <div class="head">
                <div class="left">
                    <!-- 关闭按钮 -->
                    <div class="close-btn" @click="close">
                        <img  class="icon-close"
                            :src="require('@/assets/svg/icon-close.svg')"
                            v-if="showComType == 'default'"/>
                        <img class="icon-close"
                            :src="require('@/assets/svg/icon-back.svg')"
                            v-else/>
                    </div>
                    <!-- 标题 -->
                    <div class="title">
                        {{ currentComData[showComType]["title"] }}
                    </div>
                </div>
                <div class="right">
                    <!-- 更多按钮 -->
                    <img :src="require('@/assets/svg/icon-more-l.svg')"
                        class="more"
                        @click="showMoreOption = true">
                    <div class="area-option" 
                        v-if="showMoreOption" 
                        @click="showMoreOption = false">
                        <div class="option">
                            <div class="item" @click="goTransactionsList()">
                                <img :src="require('@/assets/svg/icon-menu.svg')">
                                <span>Transaction History</span>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            <!-- 内容 -->
            <div class="body">
                <img src="@/assets/gif/icon-guide-select.gif"
                    class="icon-guide-select"
                    v-if="!currentCurrencyInfo.currencyCode && showComType == 'default'">
                <!-- 充值组件 -->
                <top-up v-if="showComType == 'topUp'" 
                    :asyncIng="asyncIng"
                    :currentCurrencyInfo="tempCurrentCurrencyInfo"
                    @topUpDone="topUpDone"></top-up>
                <!-- 表单填写容器 -->
                <div class="body-content" v-if="showComType != 'topUp'">
                    <!-- 货币列表  -->
                    <div class="currency-pop" v-show="showCurrencyPop">
                        <currency-list 
                            ref="currencyListDom"
                            @selectCurrency="selectCurrency"
                            @setCurrencyList="setCurrentCurrencyInfo"></currency-list>
                    </div>

                    <div class="left" v-if="showComType != 'preview'">
                        <div class="gift-pack-wrapper">
                            <img class="icon"
                                :src="require('@/assets/svg/icon-gift-pack.svg')"/>
                        </div>
                        <div class="bottom">
                        </div>
                    </div>

                    <div class="right"  
                        :class="{'fill-right': showComType == 'preview'}">
                        <div class="form-wrapper"  v-if="showComType == 'default'">
                            <img
                                class="img-mode"
                                :src="require('@/assets/svg/img-mode.svg')"
                            />
                            <!-- 金额、数量 -->
                            <div class="form-base">
                                <div class="item currency-select-wrapper">
                                    <div
                                        class="label currency-select"
                                        :class="{'selected': currentCurrencyInfo.currencyCode}"
                                        @click="selectCurrencyPopHandle"
                                    >
                                        <img v-if="currentCurrencyInfo.iconPath"
                                            class="icon"
                                            :src="currentCurrencyInfo.iconPath"
                                        />
                                        <div class="text">
                                            {{currentCurrencyInfo.currencyCode == 'USD' ? 'USD' : currentCurrencyInfo.tokenSymbol || 'Select a reward'}}
                                        </div>
                                        <img
                                            class="arrow"
                                            :src="currentCurrencyInfo.currencyCode ?
                                                require('@/assets/svg/icon-form-arrow-down.svg') :  require('@/assets/svg/icon-form-white-arrow-down.svg') 
                                            "
                                        />
                                    </div>
                                    <input
                                        v-model="baseFormData.amountValue"
                                        placeholder="0"
                                        autofocus
                                        @input="onAmountInput"
                                        @blur="onAmountBlur"
                                    />
                                </div>
                                <div class="item">
                                    <div class="label">
                                        <img
                                            class="icon"
                                            :src="
                                                require('@/assets/svg/icon-winners.svg')
                                            "
                                        />
                                        Winners
                                    </div>
                                    <input
                                        v-model="baseFormData.totalCount"
                                        placeholder="0"
                                        @input="onCountInput"
                                        @blur="onCountBlur"
                                    />
                                </div>
                            </div>
                            <!-- 刷新按钮、充值 -->
                            <div class="form-base-help" v-show="currentCurrencyInfo.currencyCode">
                                <div class="currency-operation">
                                    <div class="balance">
                                        <img
                                            :src="
                                                require('@/assets/svg/icon-balance.svg')
                                            "
                                        />
                                        Balance
                                    </div>
                                    <div class="amount">
                                        {{currentCurrencyInfo.balance}}
                                        <img
                                            :class="{ 'icon-refresh-rotate': refreshRotate }"
                                            @click="updateCurrencyBanlce"
                                            :src="
                                                require('@/assets/svg/icon-form-refresh.svg')
                                            "
                                        />
                                    </div>
                                    <div v-if="currentCurrencyInfo.currencyCode != 'USD'" class="top-up" @click="goTopUp">Deposit</div>
                                </div>
                                <div class="msg">
                                    Recommend winners 100～10000
                                </div>
                            </div>
                            <div class="form-label">Tasks</div>
                            <!-- 转推、like、关注 -->
                            <div class="form-require">
                                <div
                                    class="form-item"
                                    v-for="(item, index) in formList"
                                    :key="index"
                                >
                                    <div class="label">
                                        <img
                                            class="icon"
                                            :src="item.icon"
                                        />
                                        {{ item.label }}
                                    </div>
                                    <div
                                        class="control"
                                        v-if="item.nodeType == 'textarea'"
                                    >
                                        <follow-input
                                            :isAddSelf="!isBack"
                                            :atUserList="atUserList"
                                            @addUser="addFollowUser"
                                            @setUser="setFollowUser"
                                            @delUser="delFollowUser"
                                        ></follow-input>
                                    </div>
                                    <el-switch
                                        v-if="item.type == 2"
                                        v-model="item.checked"
                                    />
                                    <img
                                        v-if="item.type == 3"
                                        :src="
                                            require('@/assets/svg/icon-option-checked.svg')
                                        "
                                    />
                                </div>
                            </div>
                            <!-- 机器人 -->
                            <!-- <div class="anti-bot-wrapper">
                                <div class="label">
                                    <img
                                        :src="
                                            require('@/assets/svg/icon-anti-bot.svg')
                                        "
                                        class="icon-bot"
                                    />
                                    Anti Bot
                                    <img
                                        :src="
                                            require('@/assets/svg/icon-beta.svg')
                                        "
                                        class="icon-beta"
                                    />
                                    <img
                                        :src="
                                            require('@/assets/svg/icon-question.svg')
                                        "
                                        class="icon-question"
                                    />
                                </div>
                                <el-switch v-model="openAntiBot" />
                            </div> -->
                            <!-- 提示 -->
                            <ul class="tips-wrapper">
                                <li class="row">
                                    Rewards can only be claimed after the target user completes all tasks you set. 
                                </li>
                                <li class="row">
                                    Each user can only receive a reward once per task.
                                </li>
                                <li class="row">
                                    The reward will expire in 7 days once issued. Please promote it as much as possible within this period. After the experiment, the remaining rewards will be returned to your DeNet Wallet.
                                </li>
                            </ul>

                            <div class="submit-btn-wrapper">
                                <div class="submit-btn"
                                    :class="{ 'disabled-submit': iptErrMsgTxt != '' && !depositGuide }"
                                    @click="confirm">
                                    <img
                                        class="icon-loading"
                                        v-if="submitIng"
                                        :src="
                                            require('@/assets/svg/icon-btn-loading.svg')
                                        "
                                    />
                                    {{iptErrMsgTxt ? iptErrMsgTxt : 'NEXT'}}
                                </div>
                            </div>
                        </div>
                        <!-- 预览 -->
                        <template v-else-if="showComType == 'preview'">
                            <preview-card
                                :currentCurrencyInfo="currentCurrencyInfo"
                                :postData="publishRes"
                                :baseFormData="baseFormData"
                                :amountFontSize="previewFontSize"
                            ></preview-card>
                        </template>
                        <!-- paypal支付按钮 -->
                        <div v-show="showComType == 'preview'">
                            <paypal-button
                                :finalAmountData="finalAmountData"
                                :payConfig="{
                                    paypalClientId,
                                    feeDesc: payConfig.feeDesc,
                                    paypalHtml,
                                    amount: baseFormData.amountValue,
                                    postId
                                }"
                                :currentCurrencyInfo="currentCurrencyInfo"
                                @payPalFinsh="payPalFinsh"
                            ></paypal-button>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <!-- 提示 -->
        <message-box
            :dialogVisible="showMessageBox"
            :title="messageBoxData.title"
            :content="messageBoxData.content"
            @cancel="messageBoxCancel"
            @confirm="messageBoxConfirm"
        ></message-box>
    </div>
</template>

<script setup>
import { ref, watch, reactive, defineProps, defineEmits, onMounted, nextTick } from "vue";
import { postPublish, verifyPaypalResult, syncChainTokenRechargeRecord, getCurrencyInfoByCode } from "@/http/publishApi";
import { payCalcFee, getPayConfig } from "@/http/pay";
import { getFrontConfig } from "@/http/account";
import {setChromeStorage, getChromeStorage} from "@/uilts/chromeExtension"
import { throttle } from "@/uilts/help"
import Report from "@/log-center/log"
import { ElMessage, ElLoading } from "element-plus";
import "element-plus/es/components/message/style/css";

import {create, all} from "mathjs";

import messageBox from "@/view/components/message-box.vue";
import currencyList from "@/view/components/currency-list.vue";

import previewCard from "@/view/iframe/publish/components/preview-card";
import followInput from "@/view/iframe/publish/components/follow-input";
import paypalButton from "@/view/iframe/publish/components/paypal-button";
import topUp from "@/view/iframe/publish/components/top-up.vue";

const config = {
    number: 'BigNumber',
}
const math = create(all, config);

//临时货币信息
let tempCurrentCurrencyInfo = ref({});

let paypalClientId = ref("");
let payConfig = ref({});
let paypalHtml = ref("");

// 发布后返回的结果
let publishRes = reactive({});

//弹窗是否展示
let visible = ref(false);

//弹窗高度
let dialogHeight = ref(680);

// 当前展示组件内容 default(表单)  preview(预览)  topUp(充值)
let showComType = ref("default"); 
let currentComData = {
    default: {
        title: "Giveaway",
    },
    preview: {
        title: "Preview",
    },
    topUp: {
        title: "Deposit",
    },
};

// 机器人开关
let openAntiBot = ref(false);

// 是否正在提交
let submitIng = ref(false);

// 艾特关注人列表
let atUserList = ref([]);

// 表单错误提示
let iptErrMsgTxt = ref("Select a reward");

// 是否返回
let isBack = ref(false);

// 展示消息提示 
let showMessageBox = ref(false);

// 展示货币列表pop
let showCurrencyPop = ref(false);

// 展示更多按钮下的选项
let showMoreOption = ref(false);

// 货币列表的dom
let currencyListDom = ref('');

// 刷新按钮旋转
let refreshRotate = ref(false);

// 预览字体大小
let previewFontSize = ref(56);

let postId = ref('');

// 余额是否同步中
let asyncIng = ref(false);

// 提交按钮-充值引导提示
let depositGuide = ref(false);

let messageBoxData = ref({
    title: "",
    content: "",
});

// 真实支付金额数据
let finalAmountData = ref({
    currencyCode: '',
    feeAmountValue: 0,
    finalAmountValue: 0,
    requestAmountValue: 0,
});

// 表单数据
let baseFormData = reactive({
    amountCurrencyCode: '',
    amountValue: "",
    totalCount: "",
});

// 当前选择的货币信息
let currentCurrencyInfo = ref({
    currencyCode: "",
    currencyName: "",
    balance: "",
    currencyType: "",
    iconPath: "",
    minAmount: "",
    tokenChain: "",
    tokenSymbol: "",
    usdEstimateBalance: ""
});

let formList = reactive([
    {
        label: "Follow",
        icon: require("@/assets/svg/icon-follow.svg"),
        nodeType: "textarea",
        type: 1,
        text: [],
        checked: true,
    },
    {
        label: "Retweet",
        icon: require("@/assets/svg/icon-retweet.svg"),
        nodeType: "div",
        type: 3,
        checked: true,
    },
    {
        label: "Like Tweet",
        icon: require("@/assets/svg/icon-like.svg"),
        nodeType: "div",
        type: 2,
        checked: true,
    },
]);

const props = defineProps({
    dialogVisible: {
        type: Boolean,
        default: false,
    },
});

watch(
    () => props.dialogVisible,
    (newVal) => {
        console.log("watch", newVal);
        visible.value = newVal;
        if (newVal) {
            Report.reportLog({
                pageSource: Report.pageSource.publisherDialog,
                businessType: Report.businessType.pageView,
            });
            getLocalCurrencyInfoByCode();
            setTimeout(() => {
                setDialogHeight();
            }, 300);
        }
    }
);

const emits = defineEmits(["close", "confirm", "payPalFinsh"]);

const close = () => {
    if (showComType.value != "default") {
        showComType.value = "default";
        calcDomZoom();
        isBack.value = true;
    } else {
        initParams();
        emits("close", false);
    }
};

/**
 * 设置弹窗高度
 */
const setDialogHeight = (resize = false) => {
    nextTick(() => {
        let clientHeight = window.innerHeight;
        let gapSafe = 40;
        console.log('resize',resize)

        if (dialogHeight.value > clientHeight - gapSafe) {
            dialogHeight.value = clientHeight - gapSafe;
        } else {
            if(resize) {
                dialogHeight.value = 680;
            }
        }
    })
};

const selectCurrencyPopHandle = () => {
    Report.reportLog({
        pageSource: Report.pageSource.currencySelectorPage,
        businessType: Report.businessType.pageView,
    });
    showCurrencyPop.value = true;
    nextTick(() => {
        if(currencyListDom.value) {
            currencyListDom.value.getCurrencyInfoList && currencyListDom.value.getCurrencyInfoList();
        }
    })
}

/**
 * 获取实际支付金额
 */
const getPayAmount = async (amountValue) => {
    let res = await payCalcFee({
        params: {
            amountValue,
            currencyCode: currentCurrencyInfo.value.currencyCode,
            payChannel: 'paypal',
        },
    });
    if (res.code == 0) {
        let { finalAmountValue, feeDesc } = res.data;
        payConfig.value.feeDesc = feeDesc;
        if (finalAmountValue > 0) {
            finalAmountData.value = res.data;
        }
    }
    return res.data;
};


const confirm = () => {
    if(depositGuide.value) { //余额不够去充值
        goTopUp();
        return;
    }
    if (submitIng.value || iptErrMsgTxt.value) {
        return;
    }
    let { totalCount = 0 } = baseFormData;
    if (!totalCount) {
        return;
    }
    submitRequest();
};

/**
 * 货币列表-选中货币
 */
const selectCurrency = (params) => {
    tempCurrentCurrencyInfo.value = params;
    depositGuide.value = false;
    if(params.currencyCode != "USD" && params.balance < params.minAmount) {
        let tokenSymbol = params.currencyCode == 'USD' ? 'USD' : params.tokenSymbol;
        messageBoxBlock({
            title: `Whether to deposit ${tokenSymbol}`,
            content: `Insufficient ${tokenSymbol} balance`,
        });
    } else {
        currentCurrencyInfo.value = params;
        setLocalSelectCurrencyInfo(currentCurrencyInfo.value);
        showCurrencyPop.value = false;
        finalAmountData.value.currencyCode = currentCurrencyInfo.value.currencyCode;
        calcDomZoom();
        resetFormIpt();
        onIptSetErrorTxt();
    }
};

const calcDomZoom = () => {
    nextTick(() => {
        let maxWidth = 68;
        var textWidth = document.querySelector('.text').offsetWidth;
        if(textWidth > 68) {
            var scale = maxWidth / textWidth;
            document.querySelector('.text').style.zoom = scale;
        }
    }) 
}

const resetFormIpt = () => {
    baseFormData.amountValue = "";
    baseFormData.totalCount = "";
}

const setLocalSelectCurrencyInfo = (params = {}) => {
    setChromeStorage({ selectCurrencyInfo : JSON.stringify(params)})    
}

/**
 * 获取完货币列表
 */

const setCurrentCurrencyInfo = (params) => {
}

const messageBoxBlock = ({ title = "", content = "" }) => {
    showMessageBox.value = true;
    messageBoxData.value.title = title;
    messageBoxData.value.content = content;
};

/**
 * 确定
 */
const messageBoxConfirm = () => {
    showMessageBox.value = false;
    goTopUp();
};

/**
 * 取消
 */
const messageBoxCancel = () => {
    currentCurrencyInfo.value = tempCurrentCurrencyInfo.value;
    setLocalSelectCurrencyInfo(currentCurrencyInfo.value);
    showMessageBox.value = false;
    showCurrencyPop.value = false;
    calcDomZoom();
    resetFormIpt();
    onIptSetErrorTxt();
};

/**
 * 去充值
 */
const goTopUp = () => {
    Report.reportLog({
        pageSource: Report.pageSource.rechargePage,
        businessType: Report.businessType.pageView,
    });
    showComType.value = 'topUp';
}

/**
 * 充值done事件
 */
const topUpDone = () => {
    currentCurrencyInfo.value = tempCurrentCurrencyInfo.value;
    asyncIng.value = true;
    depositGuide.value = false;
    asyncIng.value = false;
    showCurrencyPop.value = false;
    showComType.value = 'default';
    calcDomZoom();
    onIptSetErrorTxt()
    
    asyncTokenRechRecord((res) => {
        if(res.code == 0 && res.data && res.data.length) {
            let currencyInfo = res.data[0];
            if(currencyInfo.currencyCode == currentCurrencyInfo.value.currencyCode) {
                currentCurrencyInfo.value.balance = currencyInfo.balance;
                onIptSetErrorTxt()
            }
        }
    })
}

/**
 * 更新货币余额
 */
const updateCurrencyBanlce = () => {
    if(!refreshRotate.value) {
        refreshRotate.value = true;
        setTimeout(() => {
            refreshRotate.value = false;
        }, 1000)
    }
    asyncTokenRechRecord((res) => {
        if(res.code == 0 && res.data && res.data.length) {
            let currencyInfo = res.data[0];
            if(currencyInfo.currencyCode == currentCurrencyInfo.value.currencyCode) {
                currentCurrencyInfo.value.balance = currencyInfo.balance;
            }
        }
    })
}

/**
 * 同步链上交易
 */
const asyncTokenRechRecord = (cb) => {
    syncChainTokenRechargeRecord({
        params: {
            currencyCode: currentCurrencyInfo.value.currencyCode
        }
    }).then(res => {
        cb && cb(res)
    })
}

/**
 * 提交表单请求
 */
const submitRequest = async () => {
    let { amountValue = 0, totalCount = 0 } = baseFormData;
    baseFormData.amountCurrencyCode = currentCurrencyInfo.value.currencyCode;
    // 组装提交参数
    formList[0]["text"] = atUserList.value;

    let finishConditions = [];
    for (let i = 0; i < formList.length; i++) {
        let item = {};
        item.type = formList[i]["type"];
        if (item.type == 1 && formList[i]["text"]) {
            // follow 参数
            let relatedUsers = formList[i]["text"];
            item.relatedUsers = relatedUsers;
            finishConditions.push(item);
        } else if (formList[i]["checked"]) {
            finishConditions.push(item);
        }
    }
    let receiveConditions = openAntiBot.value ? "" : [];

    // 提交参数
    let formData = {
        amountCurrencyCode: baseFormData.amountCurrencyCode,
        amountValue,
        totalCount,
        finishConditions,
        receiveConditions,
        payAmountValue: amountValue
    };
    submitIng.value = true;

    // 法币支付需要计算费率
    if(formData.amountCurrencyCode == "USD") { 
        let payAmountRes = await getPayAmount(amountValue);
        formData["payAmountValue"] = payAmountRes.finalAmountValue;
    }
    let data = {
        params: {
            postBizData: JSON.stringify(formData),
            postSrc: 1, //1 twitter
            postType: 1, //1 红包
        },
    };
    postPublish(data).then((res) => {
        submitIng.value = false;
        if (res.code == 0) {
            publishRes = res.data;
            postId.value = res.data.postId;
            Report.reportLog({
                pageSource: Report.pageSource.previewPage,
                businessType: Report.businessType.pageView,
            });
            showComType.value = "preview";
            previewFontSize.value = calcFontSize(baseFormData.amountValue, 238, 56);
            isBack.value = false;
        } else {
            console.log(res);
        }
    })
    .catch((err) => {
        console.log(err);
    });
};

const calcFontSize = (str, domWidth, maxSize) => {
    let lenstr = str.length;
    let num = parseInt(domWidth / lenstr);
    let fontSize = num < maxSize ? num : maxSize
    return fontSize;
}

/**
 * 初始化提交参数
 */
const initParams = () => {
    resetFormIpt();
    formList[0].text = [];
    atUserList.value = [];
    submitIng.value = false;
    isBack.value = false;
    showCurrencyPop.value = false;
    openAntiBot.value = false;

    tempCurrentCurrencyInfo.value = {};
    currentCurrencyInfo.value = {};
};

/**
 * 支付完成回调
 */
const payPalFinsh = (params) => {
    let {payNetwork, payStatus} = params;
    // token 支付
    if(payNetwork == 'bsc') {
        payStatusHandle(payStatus);
    } else {
        // 法币支付
        let transaction = params.transaction;
        let loadingInstance = ElLoading.service({
            background: "rgba(0,0,0,.3)",
        });
        verifyPaypalResult({
            params: {
                paypalTransactionId: transaction.id,
                postId: publishRes.postId,
                paypalClientId: paypalClientId.value,
            },
        }).then((res) => {
            loadingInstance.close();
            if (res.code == 0) {
                if (res.data) {
                    payStatusHandle(res.data.payStatus)
                }
            }
        })
        .catch(() => {
            loadingInstance.close();
        });
    }
};

const payStatusHandle = (payStatus) => {
    //支付状态 0：未支付，1：支付成功，2：支付失败，3：已关闭，4：已退款
    switch (payStatus) {
        case 1:
            emits("payPalFinsh", { publishRes });
            showComType.value = "default";
            initParams();
            break;
        case 2:
            // ElMessage({
            //     message: "Pay Fail",
            //     type: "warning",
            // });
            break;
        case 3:
            // ElMessage({
            //     message: "Pay Exceptions",
            //     type: "warning",
            // });
            break;
        case 4:
            // ElMessage({
            //     message: "Pay Exceptions",
            //     type: "warning",
            // });
            break;
    }
}

/**
 * follow组件触发新增关注人
 */
const addFollowUser = (params) => {
    atUserList.value.push(params);
};

const setFollowUser = (params) => {
    atUserList.value[params.index]["name"] = params.name;
};

const delFollowUser = (params) => {
    atUserList.value.splice(params.index, 1);
};

const onAmountInput = () => {
    let val = baseFormData.amountValue;
    // val = val.replace(/[^\d^\.]+/g, "");
    val = val.replace(/^\D*(\d*(?:\.\d{0,18})?).*$/g, '$1');

    if(val == '00') {
        val = '0'
    }
    if(val.indexOf('.') > -1){ //校验 例：00.12 => 0.12
        let arr = val.split('.');
        if(arr[0].startsWith('0')) {
            let num = +arr[0];
            val = num + '.' + arr[1];
        }
    }

    baseFormData.amountValue = val;
    setInputErrorMsg({from: 'amount', type:'input'});

    return val;
};

const onCountInput = () => {
    let val = baseFormData.totalCount;
    if (val == 0) {
        val = "";
    }
    // val = val.replace(/[^\d]/g, "");
    val = val.replace(/^\D*(\d*(?:\.\d{0,18})?).*$/g, '$1');

    baseFormData.totalCount = val;
    setInputErrorMsg({from: 'count', type:'input'});
    return val;
};

/**
 * 金额输入失焦
 */
const onAmountBlur = () => {
    setInputErrorMsg({from: 'amount', type:'blur'});
};

/**
 * count失焦，校验输入结果
 */
const onCountBlur = () => {
    setInputErrorMsg({from: 'count', type:'blur'});
};

/**
 * 输入结果金额和数量 （金额/数量）是否小于最小货币单位
 */
const calcIptValue = (cb) => {
    let amountValue = baseFormData.amountValue;
    let totalCount = baseFormData.totalCount;
    let flag = true;

    if (!amountValue || !totalCount) {
        return {
            flag
        };
    }

    // let num = amountValue, scale = 1;
    // if(amountValue.indexOf('.') > -1) {
    //     num = amountValue.toString();
    //     let obj = scaleNumber(num);
    //     num = obj.val;
    //     scale = obj.scale;
    // }
    // let minAmount = currentCurrencyInfo.value.minAmount;
    // // 输入的token数量或者法币金额，平均分到每个红包，是否小于最小单位
    // if (num / totalCount  < minAmount * scale) {
    //     flag = false;
    // }

    // return {
    //     flag,
    //     count: Math.floor((num / minAmount * scale)/ (scale * scale))
    // };
    // console.log('baseFormData',`${baseFormData.amountValue} / ${baseFormData.totalCount}`)

    if (math.format(math.evaluate(`${baseFormData.amountValue} / ${baseFormData.totalCount}`)) < +currentCurrencyInfo.value.minAmount) {
        flag = false;
    }
    return {
        flag,
        count: Math.floor(math.format(math.evaluate(`${baseFormData.amountValue} / ${currentCurrencyInfo.value.minAmount}`)))
    }
};

/**
 * 设置输入提示语
 */
const setInputErrorMsg = (params) => {

    // let amountValue = baseFormData.amountValue;
    // let num = amountValue, scale = 1;
    // if(amountValue.indexOf('.') > -1) {
    //     num = amountValue.toString();
    //     let obj = scaleNumber(num);
    //     num = obj.val;
    //     scale = obj.scale;
    // }

    onIptSetErrorTxt(params);
};

/**
 * 输入时 检测设置错误信息
 */
const onIptSetErrorTxt = (params) => {
    depositGuide.value = false;
    if(!currentCurrencyInfo.value.currencyCode) {
        iptErrMsgTxt.value = "Select a reward"
    } else if (!baseFormData.amountValue || baseFormData.amountValue == '0') {
        iptErrMsgTxt.value = "Enter an amount";
    } else if (!baseFormData.totalCount || baseFormData.totalCount == '0') {
            iptErrMsgTxt.value = "Enter the number of winners";
    } else if(+baseFormData.amountValue <= +currentCurrencyInfo.value.balance) {
        let res = calcIptValue();
        if (!res.flag) {
            iptErrMsgTxt.value = `${baseFormData.amountValue} ${currentCurrencyInfo.value.tokenSymbol} Can send up to ${res.count} winners`;
        } else {
            iptErrMsgTxt.value = "";
        }
    } else if(currentCurrencyInfo.value.currencyCode != 'USD') {
        depositGuide.value = true;
        iptErrMsgTxt.value = `Insufficient ${currentCurrencyInfo.value.tokenSymbol} balance, please deposit`;
    } 
}

/**
 * 获取支付配置（paypalClientId）
 */
const setPayConfig = () => {
    getPayConfig({
        params: {},
    }).then((res) => {
        if (res.code == 0) {
            payConfig.value = res.data;
            paypalClientId.value = res.data.paypalClientId;
        }
    });
};

/**
 * 获取配置
 */
const setFrontConfig = () => {
    getFrontConfig({
        params: {},
    }).then((res) => {
        if (res.code == 0) {
            paypalHtml.value = res.data.paypalHtml;
        }
    });
};

const goTransactionsList = () => {
    window.open(`${chrome.runtime.getURL('/iframe/home.html#/transactions')}`)
}


/**
 * 默认获取上次选中的货币信息
 */
const getLocalCurrencyInfoByCode = () => {
    if(!currentCurrencyInfo.value.currencyCode) {
        getChromeStorage('selectCurrencyInfo', (res) => {
            if(res && res.currencyCode) {
                getCurrencyInfoByCode({
                    params: {
                        currencyCode: res.currencyCode
                    }
                }).then(res => {
                    if(res.code == 0 && res.data) {
                        currentCurrencyInfo.value = res.data;
                        tempCurrentCurrencyInfo.value = res.data;
                        onIptSetErrorTxt();
                    }
                });
            }
        })
    }
}

onMounted(() => {
    setFrontConfig();
    setPayConfig();
    getLocalCurrencyInfoByCode();
    document.onkeydown = function (e) {
        var keyNum = window.event ? e.keyCode : e.which;
        let escKey = 27;
        if (keyNum == escKey) {
            if (visible.value) {
                // close();
            }
        }
    };
    window.addEventListener('resize', function () {
        setDialogHeight(true);
    })
});
</script>

<style lang="scss" scoped>
.overlay {
    position: fixed;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    z-index: 2000;
    height: 100%;
    background-color: rgba(0, 0, 0, 0.5);
    overflow: auto;

    .content {
        height: 620px;
        background: #ffffff;
        border-radius: 20px;
        position: absolute;
        left: 50%;
        top: 50%;
        transform: translate(-50%, -50%);
        box-sizing: border-box;

        .pop-mask {
            width: 100%;
            height:100%;    
            position: absolute;
            z-index:900;
        }

        .head {
            border-bottom: 1px solid #ececec;
            height: 48px;
            box-sizing: border-box;
            display: flex;
            align-items: center;
            justify-content: space-between;
            padding: 0 14px;

            .left {
                display: flex;
                align-items: center;
                .title {
                    font-size: 16px;
                    font-weight: 500;
                }

                .close-btn {
                    display: flex;
                    align-items: center;
                    width: max-content;
                    margin-right: 12px;
                    cursor: pointer;
                }
            }

            .right {
                .more {
                    cursor: pointer;
                }

                .area-option {
                    width: 100%;
                    height: 100%;
                    position: absolute;
                    top: 0;
                    left: 0;
                    z-index: 111;

                    .option {
                        position: absolute;
                        top: 43px;
                        right: 15px;
                        background: #fff;
                        filter: drop-shadow(0px 3px 20px rgba(0, 0, 0, 0.2));
                        width: 240px;
                        border-radius: 15px;
                        overflow: hidden;

                        .item {
                            width: 100%;
                            height: 50px;
                            display: flex;
                            align-items: center;
                            cursor: pointer;
                            border-top: 1px solid #E9E9E9;

                            img {
                                margin-left: 15px;
                                width: 30px;
                                height: 30px;
                                margin-right: 6px;
                            }

                            span {
                                font-weight: 500;
                                font-size: 14px;
                            }
                        }

                        .item:first-child {
                            border-top: 0;
                        }

                        .item:hover {
                                background: #F5F5F5;
                        }
                    }
                }
            }
        }

        .body {
            box-sizing: border-box;
            height: calc(100% - 48px);
            display: flex;
            position: relative;

            .icon-guide-select {
                width: 40px;
                position: absolute;
                top: 78px;
                left: 25px;
                z-index: 1000;
            }

            .body-content {
                display:flex;
                width:100%;
            }

            .currency-pop {
                position: absolute;
                width: 375px;
                height: 480px;
                top: 85px;
                left: 88px;
                z-index: 1000;
                box-shadow: 0px 4px 30px rgba(0, 0, 0, 0.3);
                background-color: #fff;
                border-radius: 20px;
                overflow-y: scroll;
            }

            .left,
            .right {
                height: 100%;
            }

            .left {
                width: 50px;
                display: flex;
                flex-direction: column;
                justify-content: space-between;
                align-items: center;

                .gift-pack-wrapper {
                    width: 100%;
                    height: 55px;
                    background: #f5f5f5;
                    display: flex;
                    align-items: center;
                    justify-content: center;
                }

                .bottom {
                    .icon {
                        display: block;
                        margin-bottom: 26px;
                    }
                }
            }

            .right {
                width: calc(100% - 50px);
                box-sizing: border-box;
                position: relative;
                border-left: 1px solid #ececec;

                .form-wrapper {
                    padding: 0px 18px 18px 18px;
                    height: calc(100% - 80px);
                    overflow-y: scroll;
                    overflow-x: hidden;
                    box-sizing: border-box;

                    .img-mode {
                        margin-left: -18px;
                    }

                    .form-base-help {
                        display: flex;
                        justify-content: space-between;
                        margin-top: 10px;

                        .currency-operation:before{
                            box-sizing: content-box;
                            width: 0px;
                            height: 0px;
                            position: absolute;
                            top: -16px;;
                            left:46px;
                            padding:0;
                            border-bottom:8px solid #FFFFFF;
                            border-top:8px solid transparent;
                            border-left:8px solid transparent;
                            border-right:8px solid transparent;
                            display: block;
                            content:'';
                            z-index: 12;
                        }
                        .currency-operation:after{
                            box-sizing: content-box;
                            width: 0px;
                            height: 0px;
                            position: absolute;
                            top: -18px;;
                            left:45px;
                            padding:0;
                            border-bottom:9px solid #EAEAEA;
                            border-top:9px solid transparent;
                            border-left:9px solid transparent;
                            border-right:9px solid transparent;
                            display: block;
                            content:'';
                            z-index:10
                        }
                        .currency-operation {
                            position: relative;
                            height: 36px;
                            border: 1px solid #EAEAEA;
                            box-sizing: border-box;
                            padding: 10px;
                            display: flex;
                            align-items: center;
                            border-radius: 100px;

                            .balance,
                            .amount {
                                display: flex;
                                align-items: center;
                            }

                            .balance {
                                font-weight: 400;
                                font-size: 13px;
                                img {
                                    width: 16px;
                                    height: 16px;
                                    margin-right: 3px;
                                }
                            }

                            .amount {
                                font-weight: 500;
                                font-size: 13px;
                                color: #4e4e4e;
                                margin-left: 5px;
                                img {
                                    margin-left: 5px;
                                    cursor: pointer;
                                }
                            }

                            .top-up {
                                font-weight: 500;
                                font-size: 12px;
                                color: #ff9839;
                                cursor: pointer;
                                margin-left: 8px;
                            }

                            .icon-refresh-rotate {
                                transform: rotate(360deg);
                                transition-duration: 1s;
                            }
                        }

                        .msg {
                            font-weight: 400;
                            font-size: 12px;
                            color: #acacac;
                        }
                    }

                    .form-base {
                        display: flex;
                        justify-content: space-between;
                        align-items: center;
                        margin-top: 14px;

                        .item {
                            width: 250px;
                            height: 50px;
                            box-sizing: border-box;
                            border-radius: 14px;
                            border: 1px solid #D1D9DD;
                            display: flex;
                            align-items: center;
                            justify-content: space-between;
                            padding: 16px 14px;

                            input {
                                width: 102px;
                                text-align: right;
                                font-weight: 500;
                                font-size: 18px;
                                border: none;
                                outline: none;
                                box-sizing: border-box;
                            }

                            input::placeholder {
                                color: #c5c5c5;
                            }

                            .label {
                                font-weight: 500;
                                font-size: 15px;
                                display: flex;
                                align-items: center;

                                .icon {
                                    width: 20px;
                                    height: 20px;
                                    margin-right: 8px;
                                }
                            }
                        }

                        .item:first-child {
                            margin-right: 14px
                        }

                        .currency-select-wrapper {
                            padding: 0 !important;
                            input {
                                padding-right: 14px;
                            }
                            .currency-select {
                                max-width: 136px;
                                cursor: pointer;
                                background: #1D9BF0;
                                margin-left: 6px;
                                padding: 6px 10px;
                                border-radius: 12px;
                                color: #fff;
                                .text {
                                    white-space: nowrap;
                                    zoom: 0.85;
                                }
                                .arrow {
                                    margin-left: 5px;
                                }
                            }
                            .selected {
                                background: #F4F4F4 !important;
                                color: #000 !important;
                            }
                        }
                    }

                    .form-label {
                        margin-top: 14px;
                        margin-bottom: 10px;
                        font-weight: 500;
                        font-size: 14px;
                    }

                    .form-require {
                        box-sizing: border-box;
                        border-radius: 15px;
                        margin-top: 12px;
                        border: 1px solid #D1D9DD;

                        .form-item {
                            min-height: 50px;
                            display: flex;
                            align-items: center;
                            justify-content: space-between;
                            margin: 0 16px;
                            border-bottom: 1px solid #ececec;

                            .label {
                                min-width: 88px;
                                display: flex;
                                align-items: center;
                                font-size: 15px;
                                font-weight: 500;

                                .icon {
                                    margin-right: 10px;
                                }
                            }

                            .control {
                                width: 100%;
                                min-height: 50px;
                                margin-left: 18px;
                                box-sizing: border-box;
                            }
                        }
                        .form-item:last-child {
                            border-bottom: none !important;
                        }
                    }
                }

                .anti-bot-wrapper {
                    width: 100%;
                    height: 50px;
                    display: flex;
                    align-items: center;
                    justify-content: space-between;
                    box-sizing: border-box;
                    border-radius: 15px;
                    padding: 0 18px;
                    margin-top: 14px;
                    border: 1px solid #D1D9DD;

                    .label {
                        display: flex;
                        align-items: center;
                        font-size: 15px;
                        font-weight: 500;

                        .icon-bot {
                            margin-right: 8px;
                        }

                        .icon-beta {
                            margin-left: 5px;
                            margin-right: 8px;
                        }

                        .icon-question {
                            cursor: pointer;
                        }
                    }
                }

                .tips-wrapper {
                    margin: 16px 0 0 12px !important;
                    padding: 0px !important;
                    .title,
                    .row {
                        font-weight: 400;
                        font-size: 12px;
                        color: #A39F9F;
                    }

                    .row {
                        box-sizing: border-box;
                        line-height: 16px;
                    }

                    .more {
                        color: #1D9BF0;
                        font-size: 13px;
                        padding-left: 4px;
                        cursor: pointer;
                    }
                }

                .submit-btn-wrapper {
                    width: 100%;
                    background: #fff;
                    position: absolute;
                    bottom: 18px;
                    left: 0;
                    box-sizing: border-box;
                    padding: 16px 18px 0 18px;

                    .submit-btn {
                        width: 100%;
                        height: 46px;
                        text-align: center;
                        background: #4a99e9;
                        border-radius: 100px;
                        color: #fff;
                        display: flex;
                        align-items: center;
                        justify-content: center;
                        font-size: 16px;
                        font-weight: 500;
                        cursor: pointer;

                        .icon-loading {
                            width: 20px;
                            height: 20px;
                            margin-right: 3px;
                        }
                    }

                    .disabled-submit {
                        background-color: #D9D9D9; 
                    }
                }
            }
            .fill-right {
                width: 100% !important;
                border-bottom-left-radius: 16px;
            }
        }
    }
}
</style>
