<template>
    <div>
        <div class="search">
            <Search :SearchForm="SetMealSearchForm" @query="initData" @reset="reset"></Search>
        </div>

        <div class="addSetMeal">
            <a-button type="primary" @click="visible = true; Edit = true;Type=true">新增套餐</a-button>
            <a-button @click="breakFlos">返回</a-button>
        </div>

        <div class="table">
            <a-table row-key="id" :data="tableData" :columns="columnsTarrit" :pagination="pagination"
                :scroll="{ x: 'auto' }" @page-change="evChangePage">
                <template #status="{ record }">
                    <a-tag :color="record.status == 1 ? '#7bc616' : '#86909c'">{{ record.status == 1 ? '上架' : '下架'
                        }}</a-tag>
                </template>
                <template #options="{ record }">
                    <a-space>
                        <a-button type="text" @click="SetUpPackage(record)">修改</a-button>
                        <a-button type="text" @click="unmount(record)">{{ record.status == 1 ? '下架' : '上架' }}</a-button>
                        <a-popconfirm content="是否要删除该资费商品?" @ok="handelDeleteTariff(record)">
                            <a-button type="text">删除</a-button>
                        </a-popconfirm>
                    </a-space>
                </template>
            </a-table>
        </div>


        <a-modal v-model:visible="visible" width="600px" @cancel="handelCancel" :title="Edit ? '新增套餐计划商品' : '编辑套餐计划商品'">
            <div class="Form">
                <a-form ref="formRef" :rules="rules" :model="Form">
                    <a-form-item label="套餐名称" field="label" validate-trigger="input">
                        <a-input placeholder="请输入套餐名称" v-model="Form.label"></a-input>
                    </a-form-item>
                    <div class="title">套餐名称将在终端用户的充值也中展示,建议不超过10个字</div>
                    <a-form-item label="充值类型" field="type" validate-trigger="input">
                        <a-select v-model="Form.type" placeholder="请选择充值类型">
                            <a-option v-for="item in puyType" :value="item.value" :key="item.value">{{ item.label
                                }}</a-option>
                        </a-select>
                    </a-form-item>
                    <a-form-item label="充值周期" field="period" validate-trigger="input">
                        <a-input v-model="Form.period"></a-input>
                        <a-select v-model="Form.timeUnit" style="width: 140px; margin:0 8px;">
                            <a-option v-for="item in cyciy" :value="item.value" :key="item.value">{{ item.label
                                }}</a-option>
                        </a-select>
                    </a-form-item>
                    <a-form-item label="充值售价" field="price" validate-trigger="input">
                        <a-input v-model="Form.price"></a-input>
                        <a-select v-model="Form.currency" style="width: 140px; margin:0 8px;">
                            <a-option v-for="item in Currency" :value="item.value" :key="item.value">{{ item.label
                                }}</a-option>
                        </a-select>
                    </a-form-item>
                    <a-form-item label="默认绑定资费" field="trafficId" validate-trigger="blur">
                        <a-select v-model="Form.trafficId">
                            <a-option v-for="item in tariffListData" :value="item.id" :key="item.id">{{ item.label
                                }}</a-option>
                        </a-select>
                    </a-form-item>
                    <div class="title">若更改绑定资费后已充值的用户仍使用之前的资费请谨慎操作!!</div>
                    <a-form-item label="流量大小" field="Flow" validate-trigger="change" v-if="Form.type == 2">
                        <a-input v-model="Form.flow"></a-input>
                        <a-select v-model="Form.flowUnit" style="width: 140px; margin:0 8px;">
                            <a-option value="KB">KB</a-option>
                            <a-option value="MB">MB</a-option>
                            <a-option value="GB">GB</a-option>
                        </a-select>
                    </a-form-item>
                </a-form>
            </div>
            <template #footer>
                <a-button @click="handelCancel">取消</a-button>
                <a-button type="primary" @click="handleSubmit">确定</a-button>
            </template>
        </a-modal>
    </div>
</template>

<script setup>
import { defineEmits, defineProps, toRefs, ref, onMounted } from 'vue';
import { CheckTariffPackages } from '@/api/path/tariffManagement.api'
import { Getdictionary, tableFunction, filterDict } from '@/mixins/index.js'
import Search from '@/components/Search/index.vue'
import { columnsTarrit } from '../config'
import { tariffList, addTariffPackage, UpdateTariffTtems, DeleteTariffItems } from "@/api/path/tariffManagement.api"
import { Message, Modal } from '@arco-design/web-vue';
const props = defineProps({
    list: Object
})

const emits = defineEmits(['break'])

const state = ref({
    pagination: {
        total: 0,
        pageSize: 10,
        current: 1,
        simTerminalId: null
    },
    visible: false,
    puyType: [],
    cyciy: [],
    Currency: [],
    tariffListData: [],
    billingMethodList: [],
    Form: {
        label: '',
        type: "",
        period: "",
        timeUnit: "",
        price: "",
        currency: "",
        trafficId: "",
        flow: "",
        flowUnit: "MB",
        id: "",
    },
    formRef: null,
    Edit: true,
    Type:true
})
const { pagination, visible, puyType, Currency, cyciy, tariffListData, Form, formRef, billingMethodList, Edit,Type } = toRefs(state.value)

const rules = {
    label: [{ required: true, message: '套餐名称不能为空' }, {
        validator: (value, cb) => {
            if (value.length > 10) {
                cb('套餐名称最多10个字符');
            } else {
                cb();
            }
        }
    }],
    type: [{ required: true, message: '请选择充值类型' }],
    period: [{ required: true, message: '请填写充值周期' }, {
        validator: (value, cb) => {
            const pattern = /^[1-9]\d*$/
            if (!pattern.test(value)) {
                cb('请输入整数')
            } else {
                cb()
            }
        }
    }],
    price: [
        { required: true, message: '请填写充值售价' },
        {
            validator: (value, cb) => {
                // 修改正则表达式,使其支持最多两位小数
                const pattern = /^\d+(\.\d{1,2})?$/;
                if (!pattern.test(value)) {
                    cb('请输入合法的数字,最多支持两位小数');
                } else {
                    cb();
                }
            }
        }
    ],
    trafficId: [{ required: true, message: '请选择充值绑定资费' }]
}

const processData = (data) => {
    return (data.records || []).map((item, index) => {
        return {
            ...item,
            priceName: item.price + item.currency,
            typeName: item.type == 1 ? '服务时长' : "购买流量",
            profitPrice: item.billingMethod == 1 ? '---' : item.profitPrice + item.currency,
            billingMethod: filterDict(billingMethodList.value, item.billingMethod),
            costPrice: item.billingMethod == 1? item.flow+item.flowUnit+'/'+ item.price +item.currency  : item.costPrice + item.trafficCurrency,
            oldPrice: item.billingMethod == 1 ? '---' : item.oldPrice + item.trafficCurrency,
            
        }
    })
}

const { tableData, evChangePage, initData, reset } = tableFunction(pagination.value, CheckTariffPackages, processData)


const handleSubmit = () => {
    formRef.value.validate(async (errors) => {
        if (!errors) {
            const FormList = {
                ...Form.value,
                type: Number(Form.value.type),
                period: Number(Form.value.period),
                simTerminalId: pagination.value.simTerminalId
            }
            if (Edit.value) {
                delete FormList.id
            }
            let res = Type.value ? await addTariffPackage(FormList) : await UpdateTariffTtems(FormList)
            if (res.code === 200) {
                initData()
                Message.success(Type.value ? '添加成功' : '修改成功')
                visible.value = false
                handelCancel()
            }
        }
    })
}

const handelCancel = () => {
    Form.value.label = ""
    Form.value.type = puyType.value[0]?.value
    Form.value.period = ""
    Form.value.timeUnit = cyciy.value[0]?.value
    Form.value.price = ""
    Form.value.currency = Currency.value[0]?.value
    Form.value.trafficId = null
    Edit.value = true
    visible.value = false

}


const unmount = async (record) => {
    Modal.info({
        title: `确定要${record.status == 1 ? '下架' : '上架'}吗?`,
        content: '',
        onOk: async () => {
            const FormList = {
                ...record,
                type: Number(Form.value.type),
                period: Number(Form.value.period),
                simTerminalId: pagination.value.simTerminalId
            }
            let res = await UpdateTariffTtems(FormList)
            if (res.code === 200) {
                Message.success(`${record.status == 1 ? '下架' : '上架'}成功`)
                initData()
            }
        }
    });
}

const handelDeleteTariff = async (record) => {
    let res = await DeleteTariffItems({ id: record.id })
    if (res.code === 200) {
        Message.success('删除成功')
        initData()
    }
}

const SetUpPackage = async (record) => {
    Object.keys(Form.value).forEach(key => {
        Form.value[key] = record[key]
    })
    Form.value.price = record.price.split('/')[0];
    Form.value.type = String(Form.value.type)
    visible.value = true
    Edit.value = false
    Type.value = false
}

const breakFlos = () => {
    emits('break', true)
}

onMounted(async () => {
    let dict = await Getdictionary(['RechargeType', 'PuyCycle', 'currencyType', 'billingMethod'])
    puyType.value = dict[0]
    Form.value.type = puyType.value[0]?.value
    cyciy.value = dict[1]
    Form.value.timeUnit = cyciy.value[0]?.value
    Currency.value = dict[2]
    Form.value.currency = Currency.value[0]?.value
    billingMethodList.value = dict[3]
    let res = await tariffList({ current: 1, size: 99999 ,source:props.list.source ,userId:props.list.userId})
    if (res.code === 200) {
        tariffListData.value = (res.data.records || []).map(item => {
            return {
                ...item,
                value: item.id,
                label: item.label + '---' + item.userName
            }
        })
    }
    pagination.value.simTerminalId = props.list.id
    initData()
})
</script>

<style scoped lang='less'>
.search,
.table {
    margin-top: 20px;
}

.addSetMeal {
    display: flex;
    justify-content: space-between;
}

.title {
    font-size: 14px;
    color: #ccc;
    margin-left: 120px;
    margin-top: -15px;
    margin-bottom: 10px;
}
</style>