package com.hzs.system.enums.controller;

import com.hzs.common.core.enums.*;
import com.hzs.common.core.web.domain.AjaxResult;
import com.hzs.common.domain.system.base.BdTransaction;
import com.hzs.common.security.utils.SecurityUtils;
import com.hzs.system.base.service.IBdTransactionService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

/**
 * 枚举初始化控制器
 */
@Slf4j
@RestController
@RequestMapping("/init/enums")
public class EnumsInitController {

    @Autowired
    private IBdTransactionService iBdTransactionService;

    /**
     * 初始化枚举翻译
     *
     * @return
     */
    @GetMapping("")
    public AjaxResult init() {
        // 初始数据列表
        List<BdTransaction> initList = new ArrayList<>();

        // 云代类型枚举（收益类型枚举）
        for (ECloudType value : ECloudType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }
        // 升级类型
        for (EUpgradeType value : EUpgradeType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }
        // 地区类型枚举
        for (EAreaType value : EAreaType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }
        // 结算方式枚举
        for (ESettleType value : ESettleType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }
        // 用户类型分类
        for (ECategory value : ECategory.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }
        // 注水方式枚举
        for (EInfusingWaterType value : EInfusingWaterType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }
        // 仓库类型枚举
        for (EStorehouseType value : EStorehouseType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }
        // 奖衔级别枚举
        for (EAwardsLevel value : EAwardsLevel.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }
        // 国家币种种类
        for (ECurrencyType value : ECurrencyType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }
        // 业绩类型
        for (EAchievementType value : EAchievementType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }
        // 显示隐藏枚举
        for (EShowStatus value : EShowStatus.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        //伞下新增真实奖衔订单类型
        for (EOrderBusiness value : EOrderBusiness.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        // 代数枚举
        for (EAlgebra value : EAlgebra.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

         // 等级枚举枚举
        for (EGrade value : EGrade.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        // 直推配置取值枚举
        for (ETakeValueType value : ETakeValueType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }
        // 新增修改删除枚举
        for (EControlType value : EControlType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }
        // 修改会员姓名枚举
        for (EModifyName value : EModifyName.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }
        // 官网 广告banner发布位置
        for (EPosition value : EPosition.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        // 考核状态(会员端专用)
        for (EMemberAssessStatus value : EMemberAssessStatus.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }
        // 修改联系方式枚举
        for (EModifyPhone value : EModifyPhone.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }
        // 修改免考状态枚举
        for (EFreeAssessmentState value : EFreeAssessmentState.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }
        // 注水业绩枚举
        for (EMemberAchieve value : EMemberAchieve.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        // 重置密码
        for (EResetPassword value : EResetPassword.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }
        // 重置银行信息枚举
        for (EResetBank value : EResetBank.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }
        // 修改登录状态枚举
        for (ESignInState value : ESignInState.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }
        // 修改收益状态枚举
        for (EProfitState value : EProfitState.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }


        // 删除标记
        for (EDelFlag value : EDelFlag.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        // 是否枚举类
        for (EYesNo value : EYesNo.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }
        // 是否经销商枚举类
        for (EDealerYesNo value : EDealerYesNo.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        // 订单类型
        for (EOrderType value : EOrderType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        // 货币种类
        for (EAccount value : EAccount.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        // 审批业务类型
        for (EApprovalBusiness value : EApprovalBusiness.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        // 审批状态
        for (EApproveStatus value : EApproveStatus.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        // 审批操作
        for (EApproveOperation value : EApproveOperation.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        // 签呈来源
        for (ESignSource value : ESignSource.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        // 充值审批状态
        for (EApproveRechargeStatus value : EApproveRechargeStatus.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        // 权限类型
        for (EPermissionType value : EPermissionType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        // 专区枚举
        for (ESpecialArea value : ESpecialArea.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        // 统计值枚举
        for (EStatisticalValue value : EStatisticalValue.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        // 注册权限
        for (ERegistrationAuthority value : ERegistrationAuthority.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        // 关系类型
        for (ERelationType value : ERelationType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        // 极差类型
        for (ERangeType value : ERangeType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        // 计算类型
        for (ECalType value : ECalType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        //账户状态（会员登录账号）
        for (EAccountStatus value : EAccountStatus.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        //活动类型
        for (EActType value : EActType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        //条码状态
        for (EBarcodeStatus value : EBarcodeStatus.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        //会员类型
        for (ECustomerType value : ECustomerType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        //发货状态
        for (EDeliveryStatus value : EDeliveryStatus.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        //安置部门
        for (EPlaceDept value : EPlaceDept.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        //语言
        for (ELanguages value : ELanguages.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        //首页banner类型枚举类
        for (EHomeBannerType value : EHomeBannerType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        //转账特殊设置枚举
        for (ETransferSpecial value : ETransferSpecial.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        // 运输方式
        for (ETransportType value : ETransportType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        // 单位
        for (EUnit value : EUnit.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        // 钱包状态
        for (EWalletStatus value : EWalletStatus.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        // 打印状态
        for (EPrintStatus value : EPrintStatus.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        /**
         * 是否上传
         */
        for (EYesNoUpLoads value : EYesNoUpLoads.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        /**
         * 是否认证
         */
        for (EYesNoAttestation value : EYesNoAttestation.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        /**
         * 订单来源
         */
        for (EOrderSource value : EOrderSource.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        /**
         * 变化类型
         */
        for (EChangeType value : EChangeType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        /**
         * 考核类型
         */
        for (EAssessmentType value : EAssessmentType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        /**
         * 免考类型
         */
        for (EExemptType value : EExemptType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        /**
         * 交款方式
         */
        for (EPaymentType value : EPaymentType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }
        /**
         * 充值类型
         */
        for (ERechargeMethod value : ERechargeMethod.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        /**
         * 充值操作类型
         */
        for (ERechargeOperationType value : ERechargeOperationType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        /**
         * 冻结操作类型
         */
        for (EFreezeOperationType value : EFreezeOperationType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        /**
         * 订单状态
         */
        for (EOrderStatus value : EOrderStatus.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        /**
         * 交易类型
         */
        for (ETradeType value : ETradeType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        /**
         * 启用状态
         */
        for (EnableStatus value : EnableStatus.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        //公布日期、发布日期、可提现日期 枚举
        for (EPublishDate value : EPublishDate.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        //奖结算周期枚举枚举
        for (ESettlementCycle value : ESettlementCycle.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        /**
         * 标签类型
         */
        for (ELabelType value : ELabelType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        /**
         * 公告网站类型
         */
        for (ENoticeWebsiteType value : ENoticeWebsiteType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        /**
         * 公告功能类型
         */
        for (ENoticeFunctionType value : ENoticeFunctionType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        /**
         * 弹窗类型
         */
        for (EPopupType value : EPopupType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }


        /**
         * 公告类型
         */
        for (ENoticeType value : ENoticeType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        /**
         * 公告类型
         */
        for (ENoticeState value : ENoticeState.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        /**
         * 公告等级
         */
        for (ENoticeGrade value : ENoticeGrade.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }
        /**
         * 业务办理流程类型
         */
        for (EProcessType value : EProcessType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        // 前台菜单
        for (EMenu value : EMenu.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }
        // 前台菜单明细
        for (EMenuDetail value : EMenuDetail.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }
        // 考核状态
        for (EAssessStatus value : EAssessStatus.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }
        /**
         * 账户状态枚举（钱包状态）
         */
        for (EMemberAccount value : EMemberAccount.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        /**
         * 签呈类型
         */
        for (ESignType value : ESignType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        /**
         * 销售类型
         */
        for (ESaleType value : ESaleType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        /**
         * 支付业务类型
         */
        for (EPayBusinessType value : EPayBusinessType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }
        /**
         * 支付状态
         */
        for (EPayStatus value : EPayStatus.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }
        /**
         * 支付渠道
         */
        for (EPayChannel value : EPayChannel.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }
        /**
         * 支付类型
         */
        for (EPayType value : EPayType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }
        /**
         * 退款状态
         */
        for (ERefundStatus value : ERefundStatus.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }
        /**
         * 售后状态
         */
        for (EAfterSale value : EAfterSale.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        /**
         * 站内信业务类型
         */
        for (ENoticeBusinessType value : ENoticeBusinessType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        for (EWithdrawStatus value : EWithdrawStatus.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        /**
         * 站内信类型
         */
        for (EInternalMessageType value : EInternalMessageType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }


        /**
         * 会员续约白名单类型
         */
        for (EAgreementWhiteType value : EAgreementWhiteType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        /**
         * 只读状态
         */
        for (EReadState value : EReadState.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        // 日期类型
        for (EDayType value : EDayType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        for (EIncomeStatus incomeStatus : EIncomeStatus.values()) {
            initList.add(this.createData(incomeStatus.getKey(), incomeStatus.getLabel()));
        }

        // 活动状态
        for (EActivityStatus value : EActivityStatus.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }
        // 达标状态
        for (EReachState value : EReachState.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }
        // 比率类型
        for (ERatioType value : ERatioType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        for (EBonusIncomeStatus value : EBonusIncomeStatus.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        // 数据类型(推荐)
        for (ERecommendDadaType value : ERecommendDadaType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        // 数据类型(安置)
        for (EDadaType value : EDadaType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        // 交易配置 业务类型
        for (EBusinessModule value : EBusinessModule.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        // 点位状态
        for (EPointStatus value : EPointStatus.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        // 正反查
        for (EUpDown value : EUpDown.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        // 客商类型
        for (ESupplierType value : ESupplierType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        // 伞下直推新增业绩订单类型枚举
        for (EOrderUpBusiness value : EOrderUpBusiness.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        // 树位置枚举
        for (ERealType value : ERealType.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

        // 发放状态
        for (EGrantStatus value : EGrantStatus.values()) {
            initList.add(this.createData(value.getKey(), value.getLabel()));
        }

//        for (BdTransaction bdTransaction : initList) {
//            log.info("====={}", bdTransaction.getKey());
//        }

        // 遍历入库
        Long userId = SecurityUtils.getUserId();
        initList.parallelStream().forEach((bdTransaction) -> {
            bdTransaction.setPkCreator(userId);
            iBdTransactionService.initTransaction(bdTransaction);
        });

        return AjaxResult.success();
    }


    /**
     * 创建翻译数据
     *
     * @param key   缓步key值
     * @param label 缓存简体中文值
     * @return
     */
    private BdTransaction createData(String key, String label) {
        BdTransaction bdTransaction = new BdTransaction();
        bdTransaction.setKey(key);
        bdTransaction.setChinese(label);
        bdTransaction.setIsCache(EYesNo.YES.getIntValue());
        bdTransaction.setIsUpload(EYesNo.YES.getIntValue());
        return bdTransaction;
    }

}
