package com.fastcashier.lib_common.function.account

import com.fastcashier.lib_common.base.BaseBean
import java.util.*

/**
 * 类描述：基础应用信息类
 * 概述：自助收银终端应用配置信息
 * 创建人：zpxiang
 * 创建时间：2022/6/1
 * 修改人：
 * 修改时间：
 */
class SelfCashierTerminalConfig : BaseBean() {
    var shopDiyParams: String? = null
    var alipayConfig: AlipayConfig? = null
    var huihuaConfig: HuihuaConfig? = null
    var scoRuntimeConfig: ScoRuntimeConfig? = null
    var shopConfig: ShopConfig? = null
    var scoFunctionConfig: ScoFunctionConfig? = null
    var miYaPayPlantformConfig: MiYaPayPlatformConfig? = null
    var weiXinConfig: WeiXinConfig? = null
    var localDiyConfig: LocalDiyConfig? = null
    var logoAndVideoConfig: LogoAndVideoConfig? = null
    var printConfig: PrintConfig? = null

    /**
     * 广告图片，视频配置
     */
    class LogoAndVideoConfig {
        /**
         * 图片 文件夹全路径
         * 如果商户提供了商品图片，需要放在公司cdn上以一个单独的文件夹存放，图片以商品的条形码命名。
         */
        var imageFolderName: String? = null

        /**
         * 广告图，商户logo，等
         */
        var scoUrlParams: List<ScoUrlParams>? = null

        /**
         * 没商品图片时 默认图片地址
         */
        var defaultGoodsImgUrl: String? = null

        /**
         * 微信（支付包暂时没有）支付满减海报广告
         */
        var isSdkPayDiscPosterShow = false
    }

    /**
     * 广告图片，视频配置
     */
    class ScoUrlParams {
        /**
         * 广告图类型
         */
        var urlType = 0

        /**
         * 广告图名称
         */
        var urlName: String? = null

        /**
         * 广告图连接
         */
        var url: String? = null

        /**
         * 图片还是视频 type == 0 代表视频 1 代表图片
         */
        var type = 0

        /**
         * 生效开始时间
         */
        var startTime: Date? = null

        /**
         * 生效结束时间
         */
        var endTime: Date? = null

        /**
         * 图片播放间隔,当type==0且图片url列表数量大于1时生效
         */
        var imageIntervalMillSeconds = 0

        companion object {
            /**
             * 商户logo
             */
            const val MERCHANT_LOGO = 1

            /**
             * 支付宝版新版 上部Url
             */
            const val SCO_HOME_ALI_TOP_PIC_URL = 2

            /**
             * 支付宝版新版 下部Url
             */
            const val SCO_HOME_ALI_BOTTOM_PIC_URL = 3

            /**
             * 横版 商户logo
             */
            const val LAND_MERCHANT_LOGO = 4

            /**
             * 横版 支付宝版新版 上部Url
             */
            const val SCO_LAND_HOME_ALI_TOP_PIC_URL = 5

            /**
             * 横版支付宝版新版 下部Url
             */
            const val SCO_LAND_HOME_ALI_BOTTOM_PIC_URL = 6

            /**
             * 首页 视频和图片 混合轮播
             */
            const val HOME_BANNER_AD = 7
        }
    }

    /**
     * 商户基本信息
     */
    class ShopConfig {
        /**
         * 店铺号
         */
        var storeId: String? = null

        /**
         * 店铺名称
         * 示展部顶面页在会段字该
         */
        var storeName: String? = null

        /**
         * 虚拟收银员Id
         * 门店给该账号分配的虚拟收银员Id
         */
        var operatorId: String? = null

        /**
         * posId
         * 门店给该账号分配的虚拟POsId
         */
        var posId: String? = null

        /**
         * 门店地址
         */
        var storeAddress: String? = null

        /**
         * 商户名称
         */
        var mechantName: String? = null

        /**
         * 商户公众号，以"|"分隔
         */
        var officialAccountUrl: String? = null

        fun setOfficialAccountUrl(officialAccountUrl: String?): ShopConfig {
            this.officialAccountUrl = officialAccountUrl
            return this
        }

        fun setMechantName(mechantName: String?): ShopConfig {
            this.mechantName = mechantName
            return this
        }
    }

    class PrintConfig {
        /**
         * 小票尾部信息
         */
        var printFooterMessage: String? = null

        /**
         * 小票头显示信息
         */
        var printHeaderMessage: String? = null

        /**
         * 额外信息
         */
        var extData: String? = null
    }

    /**
     * Sco 運行時 配置
     */
    class ScoRuntimeConfig {
        /**
         * 获取商品信息，结算，回传订单等功能用的地址 eg：erpIp https://hhmspre.miyapay.com/
         */
        var erpIp: String? = null

        /**
         * 使用的支付服务标识
         * 1.米雅支付平台，2.米雅jar包链接前置 3.米雅PosHub
         */
        var usePayServiceTag = 0

        /**
         * 组件提供者标示
         * 支付宝刷脸付为 0，微信刷脸付为1  无刷脸 为3
         */
        var componentProviderCategory = 0

        /**
         * 不配置默认使用erIp
         * 该地址将影响到前端刷脸app的检查更新接口、日志上传接口等。
         * 如果dataSourceIp配置成了直连商户的posip，那么通常需要配置此字段
         */
        var platformUrl: String? = null

        /**
         * 是否需要 初始化
         * 针对特殊商户，例如商品主档获取途径很特殊，默认false
         */
        var isNeedInitBeforeUse = false

        /**
         * 事件分发器实现类全类名 3.0.0 以上版本存在
         * 不配置使用默认实现类
         */
        var actionDispatcherClassName: String? = null

        /**
         * 商户erp数据处理核心类全类名
         */
        var dataSourceClassName: String? = null

        /**
         * 自助收银机首页展示页全类名
         * 不配置使用默认页面
         */
        var scoHomeActionViewActivityClassName: String? = null

        /**
         * 自助收银机支付页展示页全类名
         * 不配置使用默认页面
         */
        var scoPayActionViewActivityClassName: String? = null

        /**
         * 自助收银机支付结果页展示页全类名
         * 不配置使用默认页面
         */
        var scoPayResultActionViewActivityClassName: String? = null

        /**
         * 自助收银机扫码添加商品页展示页全类名
         * 不配置使用默认页面
         */
        var scoScanGoodsActionViewActivityClassName: String? = null

        /**
         * 自助收银机商家操作中心展示页全类名
         * 不配置使用默认页面
         */
        var scoMerchantOperateActionViewActivityClassName: String? = null

        /**
         * 自助收银机结算页面展示页全类名
         * 不配置使用默认页面
         */
        var scoBalanceOrderActionViewActivityClassName: String? = null

        /**
         * 自助收银机核验页全类名
         * 不配置使用默认页面
         */
        var scoVerifyHomeActionViewActivityClassName: String? = null

        /**
         * 商家操作入口是否显示
         */
        var isMerchantOperatePageEnable = false

        /**
         * 打印类全类名
         */
        var printDataSourceClassName: String? = null

        /**
         * 是否使用电子小票
         */
        var isUseETicket = false
    }

    /**
     * 支付宝配置参数
     */
    class AlipayConfig {
        /**
         * 商户 pid
         */
        var merchantId: String? = null

        /**
         * 商户appip
         */
        var appId: String? = null

        /**
         * 米雅isv pid
         */
        var aliPartnerId: String? = null
    }

    /**
     * 针对KA 客户的本地个性化配置选项
     */
    class LocalDiyConfig {
        /**
         * 是否显示米雅支持
         */
        var isShowMiYaSupportLogo = true

        /**
         * 商品列表是否显示原价
         */
        var isShowOriginPrice = true
    }

    /**
     * 会花服务器配置信息
     */
    @Deprecated("")
    class HuihuaConfig {
        var name: String? = null
        var code: String? = null
        var merchant: String? = null
        var banners: String? = null

        //店铺id
        var storeId: String? = null

        //店铺名称
        var storeName: String? = null
        var storeAddress: String? = null

        //會花 hhMerchant
        var hhMerchant: String? = null

        /**
         * 收银员Id
         */
        var operatorId: String? = null

        /**
         * 商户名称
         */
        var mechantName: String? = null
        fun setMechantName(mechantName: String?): HuihuaConfig {
            this.mechantName = mechantName
            return this
        }
    }

    /**
     * 自助收银终端 功能开关配置
     */
    class ScoFunctionConfig {
        /**
         * 是否限制档口商品，0：不限制，1：限制
         */
        var restrictGoods = 0

        /**
         * 商户 特殊功能开关以Json存放
         */
        var extData: String? = null

        /**
         * 商户特殊功能开关解析类
         */
        var merchantFunctionSerializableClass: String? = null

        /**
         * 扫描会员弹框提示文案
         */
        var scanMemberHint: String? = null

        /**
         * 是否开启称重防损功能
         */
        var isEnableWeighing = false

        /**
         * 是否开启重传组件
         */
        var isEnableReUpload = false

        /**
         * 会员功能是否启用
         */
        var isMemberFeatureEnable = false

        /**
         * 是否需要结算订单
         */
        var isNeedBalanceOrder = false

        /**
         * 是否开启日结功能
         */
        var isDailyCheckEnable = false

        /**
         * 登录接口错误时，在本地有配置信息的情况下，直接用本地配置信息进入
         */
        var isOfflineModeEnableWhenNetWorkError = false

        /**
         * 开启绑定Mac 地址
         */
        var isBindDeviceMacAddressEnable = false

        /**
         * 获取非标准商品的请求地址
         */
        var queryNonstandardGoodsUrl: String? = null

        /**
         * 是否开启会员注册
         */
        var isRegisterMemberEnable = false

        /**
         * 强制性校验会员id为手机号
         */
        var isForceMemberIdAsPhone = false

        /**
         * 商品列表分组显示个数，0表示不分组
         */
        var goodsGroupNum = 0

        /**
         * 注册会员请求地址
         */
        var requestRegisterMemberUrl: String? = null

        /**
         * 是否开启绑定员工卡
         */
        var isBindStaffIdEnable = false

        /**
         * 请求绑定员工卡地址
         */
        var requestBindStaffIdUrl: String? = null

        /**
         * 是否启用优惠券
         */
        var isCouponEnable = false

        /**
         * 核验优惠券的地址
         */
        var verifyCouponUrl: String? = null

        /**
         * 可以使用的支付方式控制 以支付平台的支付方式TAG为准  格式：[1|3|A]
         */
        var payWayControl: String? = null

        /**
         * 是否开启非标准商品
         */
        var isNonstandardGoodsEnable = false

        /**
         * 是否开启核验
         */
        var isVerifyFeatureEnable = false

        /**
         * 是否关闭自助收银入口
         */
        var isCloseSelfCashierFeatureEnable = false

        /**
         * 核验地址
         */
        var verifyUrl: String? = null

        /**
         * 是否开启手动输入数量功能
         */
        var isEnableModifyGoodsNum = false

        /**
         * 是否通过接口验证会员
         *
         * @return
         */
        var isCallMemberApi = false

        //是否开启订单查询
        var isOrderQueryFeatureEnable = false

        //是否开启员工登陆
        var isStaffLoginFeatureEnable = false

        //是否开启优惠明细显示
        var isCouponDetailShowEnable = false

        //是否在会员登录之后立即刷新刷新购物车显示商品的会员信息（目前万宁微信在使用）
        var isChangeGoodsInfoAfterInputMember = false

        //首页功能优先级 0优先展示收银 1代表优先展示会员功能
        var homeFeatureShowCategory = 0

        //会员功能展示场景 0是首页和扫商品页面都展示 1是只有首页展示
        var memberFeatureShowScene = 0

        //是否展示会员积分
        var isShowMemberScore = false

        /**
         * 是否支持0元支付
         */
        var isEnablePayZero = false

        /**
         * 是否开启信用防损功能
         */
        var isOpenCredit = false

        /**
         * 是否静默授权
         */
        var isSilentCredit = false

        /**
         * 授权配置
         *
         *
         * 从低到高，减少商品，删除商品，退出交易，进入功能中心，进入购物车
         * 需要的话填1，不需要的话填0，高位有1的话，那么中间某功能不需要授权的话也要填0
         * 如：只需要进入功能中心授权，配置1000
         * 只需要退出交易授权：配置100
         * 需要退出交易，减少商品，删除商品，进入购物车授权，配置10111
         */
        private val authConfig: String? = null

        /**
         * 授权前缀
         */
        var authPrefix: String? = null

        /**
         * 授权码 - 如果服务端配置了 就以服务端为准
         */
        var authCode: String? = null
        fun setRestrictGoods(restrictGoods: Int): ScoFunctionConfig {
            this.restrictGoods = restrictGoods
            return this
        }

        fun setEnableWeighing(enableWeighing: Boolean): ScoFunctionConfig {
            isEnableWeighing = enableWeighing
            return this
        }

        fun setScanMemberHint(scanMemberHint: String?): ScoFunctionConfig {
            this.scanMemberHint = scanMemberHint
            return this
        }

        fun getCallMemberApi(): Boolean {
            return isCallMemberApi
        }

        fun getNonstandardGoodsEnable(): Boolean {
            return isNonstandardGoodsEnable
        }

        fun setEnableReUpload(enableReUpload: Boolean): ScoFunctionConfig {
            isEnableReUpload = enableReUpload
            return this
        }
    }

    /**
     * 米雅支付平台 配置参数
     */
    class MiYaPayPlatformConfig {
        /**
         * 支付平台集群地址
         * eg http://118.178.120.57/
         */
        var miyaPayPlatformUrl: String? = null

        /**
         * 米雅支付平台商户号
         */
        var saasId: String? = null

        /**
         * 门店号
         */
        var marketId: String? = null

        /**
         * 米雅支付平台 签名key
         */
        var miyaPayPlatformSignKey: String? = null

        /**
         * pos 机具id
         */
        var posId: String? = null

        /**
         * 米雅支付平台 支付版本
         */
        var miyaPayApiVersion: String? = null

        /**
         * 收银员id
         */
        var cashierCode: String? = null

        /**
         * 支付渠道所展示的商品信息描述
         */
        var payBillShowMsg: String? = null
    }

    /**
     * 微信 参数配置
     */
    class WeiXinConfig {
        /**
         * 公众号
         */
        var wxAppid: String? = null

        /**
         * 商户号
         */
        var wxMchId: String? = null

        /**
         * 子商户公众账号ID(服务商模式)
         */
        var wxSubAppid: String? = null

        /**
         * 子商户号(服务商模式)
         */
        var wxSubMchId: String? = null

        /**
         * 微信代理的IP
         */
        var wxProxyIp: String? = null

        /**
         * 是否上传sub_appid
         */
        var isWxAddSubAppid = false

        /**
         * 是否保持使用空的sub_mch_id，即不传入sub_mch_id，微信万宁的不传，其它商户的传
         */
        var isKeepNullSubMchId = false

        /**
         * 微信代理的端口
         */
        var wxProxyPort: String? = null
    }
}