package com.czg.constants;

import java.util.Set;

/**
 * 系统参数编码常量类
 *
 * @author ww
 * @date 2025/12/22
 * @since 1.0.0
 */
public interface ParamCodeCst {

    /**
     * 用户小程序参数
     */
    Set<String> USER_MINI_KEY_SET = Set.of(Wechat.Mini.USER_WX_APP_ID, Wechat.Mini.USER_WX_SECRETE);

    /**
     * 商家小程序参数
     */
    Set<String> SHOP_MINI_KEY_SET = Set.of(Wechat.Mini.SHOP_WX_APP_ID, Wechat.Mini.SHOP_WX_SECRETE);

    /**
     * 商家公众号参数  推送 库存不足等消息
     */
    Set<String> SHOP_AC_KEY_SET = Set.of(Wechat.Ac.SHOP_WX_AC_APP_ID, Wechat.Ac.SHOP_WX_AC_SECRETE);
    /**
     * 用户公众号参数  推送商家模板消息
     */
    Set<String> USER_AC_KEY_SET = Set.of(Wechat.Ac.USER_WX_AC_APP_ID, Wechat.Ac.USER_WX_AC_SECRETE);

    /**
     * 微信支付参数KEY
     */
    Set<String> PAY_KEY_SET = Set.of(
            Wechat.Pay.WX_PUB_KEY,
            Wechat.Pay.WX_API_CLIENT_KEY,
            Wechat.Pay.WX_API_CLIENT_CERT,
            Wechat.Pay.WX_MCH_ID,
            Wechat.Pay.WX_V3_KEY,
            System.NATIVE_NOTIFY_URL
    );

    /**
     * 支付宝参数KEY
     */
    Set<String> ALI_PAY_KEY_SET = Set.of(
            Alipay.Web.ALI_GATEWAY,
            Alipay.Mini.ALI_MINI_APP_ID,
            Alipay.Mini.ALI_MINI_PRIVATE_KEY,
            Alipay.Mini.ALI_MINI_PUBLIC_KEY,
            Alipay.Web.ALI_ACCOUNT_APP_ID,
            Alipay.Web.ALI_ACCOUNT_PRIVATE_KEY,
            Alipay.Web.ALI_ACCOUNT_PUBLIC_KEY
    );

    /**
     * 阿里云OSS参数KEY
     */
    Set<String> ALI_OSS_KEY_SET = Set.of(
            ParamCodeCst.AliYun.ALI_SMS_KEY,
            ParamCodeCst.AliYun.ALI_SMS_SECRET,
            ParamCodeCst.AliYun.ALI_SMS_TEMPLATE_CODE
    );

    /**
     * 阿里云临时凭证
     */
    Set<String> OSS_KEY_SET = Set.of(AliYun.ALI_OSS_ACCESS_KEY, AliYun.ALI_OSS_ACCESS_SECRET, AliYun.ALI_OSS_ENDPOINT, AliYun.ALI_OSS_ROLE_ARN);


    /**
     * 系统通用配置项
     * <p>存放跨业务模块的通用系统配置</p>
     */
    class System {
        /**
         * 超掌柜支付回调地址
         * <p>支付宝/微信支付完成后，支付平台回调我方系统的地址</p>
         */
        public static String NATIVE_PAY_NOTIFY_URL = "native_pay_notify_url";
        public static String NATIVE_REFUND_NOTIFY_URL = "native_refund_notify_url";

        /**
         * 超掌柜支付域名
         * <p>超掌柜支付相关接口的根域名</p>
         */
        public static String POLY_DOMAIN = "poly_domain";
        public static String POLY_PAY_NOTIFY_URL = "poly_pay_notify_url";
        public static String POLY_REFUND_NOTIFY_URL = "poly_refund_notify_url";

        /**
         * 微信原生回调地址
         * <p>微信原生支付接口的回调地址（区别于超掌柜封装的回调）</p>
         */
        public static String NATIVE_NOTIFY_URL = "native_notify_url";
        /**
         * 店铺订单支付BaseUrl
         * <p>店铺订单支付页面的基础域名</p>
         */
        public static String SHOP_ORDER_PAY_BASE_URL = "shop_order_pay_base_url";
        /**
         * 排队到号通知
         */
        public static String WX_MINI_MSG_CALL_CURRENT = "wx_mini_msg_call_current";
        /**
         * 排队即将到号提醒
         */
        public static String WX_MINI_MSG_CALL_NEAR = "wx_mini_msg_call_near";
        /**
         * 排队提醒
         */
        public static String WX_MINI_MSG_CALL_PASS = "wx_mini_msg_call_pass";

        /**
         * 小程序会员页面地址
         * <p>微信小程序中会员中心页面的跳转地址 分享时 使用</p>
         */
        public static String WX_MINI_VIP_URL = "wx_mini_vip_url";

        /**
         * 桌码生成路径
         * <p>餐厅桌码图片生成的基础路径/域名</p>
         */
        public static String TABLE_CODE_URL = "table_code_url";

        /**
         * 短信费用
         * <p>单条短信发送的成本费用（单位：元）</p>
         */
        public static String SMS_FEE = "sms_fee";


        /**
         * 平台名称
         * <p>系统对外展示的平台名称（如：超掌柜）</p>
         */
        public static String PLATE_NAME = "plate_name";

        /**
         * 叫号页面地址
         * <p>餐厅叫号系统的前端页面地址</p>
         */
        public static String CALL_PAGE_URL = "call_page_url";

        /**
         * 公众号关注位置
         * <p>公众号关注入口的展示位置，可选值：mine-我的页面、order-订单页面、eat-就餐页面</p>
         */
        public static String FOLLOW_INDEX = "follow_index";
    }

    /**
     * 微信相关配置项
     * <p>包含公众号、小程序、微信支付三大模块的配置</p>
     */
    interface Wechat {
        /**
         * 微信公众号（银收客）配置项
         * <p>银收客公众号相关配置，用于发送订阅消息等场景</p>
         */
        class Ac {
            /**
             * 商家每日可创建次数
             * <p>商家通过公众号创建订单/活动等的每日上限次数</p>
             */
            public static String AC_DAY_COUNT = "ac_day_count";

            /**
             * 微信公众号AppId（银收客主号）
             * <p>银收客主体公众号的AppId，用于发送商品/耗材库存等订阅消息</p>
             * wx_account_app_id
             */
            public static String SHOP_WX_AC_APP_ID = "shop_wx_ac_app_id";
            /**
             * 微信公众号Secret（银收客主号）
             * <p>银收客主体公众号的Secret，用于获取access_token</p>
             */
            public static String SHOP_WX_AC_SECRETE = "shop_wx_ac_secrete";


            /**
             * 用户订阅公众号AppId（银收客CZg）
             * <p>用户侧订阅的银收客CZg公众号AppId</p>
             * wechat_ac_appid
             */
            public static String USER_WX_AC_APP_ID = "user_wx_ac_app_id";//

            /**
             * 用户订阅公众号Secret（银收客CZg）
             * <p>用户侧订阅的银收客CZg公众号Secret</p>
             */
            public static String USER_WX_AC_SECRETE = "user_wx_ac_secrete";//
        }

        /**
         * 微信小程序配置项
         * <p>包含商家端和用户端小程序的密钥、AppId等配置</p>
         */
        class Mini {
            /**
             * 商家端小程序AppId
             * <p>商家管理端微信小程序的AppId</p>
             */
            public static String SHOP_WX_APP_ID = "shop_wx_app_id";
            /**
             * 商家端小程序Secret
             * <p>商家管理端微信小程序的Secret</p>
             */
            public static String SHOP_WX_SECRETE = "shop_wx_secrete";

            /**
             * 用户微信小程序AppId
             * <p>普通用户使用的微信小程序AppId</p>
             */
            public static String USER_WX_APP_ID = "user_wx_app_id";

            /**
             * 用户微信小程序Secret
             * <p>普通用户使用的微信小程序Secret</p>
             */
            public static String USER_WX_SECRETE = "user_wx_secrete";
        }

        /**
         * 微信支付配置项
         * <p>微信支付V3接口相关的证书、密钥、商户号等配置</p>
         */
        class Pay {
            /**
             * 微信API支付证书PEM
             * <p>微信支付V3接口所需的api_client_cert.pem证书内容</p>
             */
            public static String WX_API_CLIENT_CERT = "wx_api_client_cert";

            /**
             * 微信API支付证书密钥PEM
             * <p>微信支付V3接口所需的api_client_key.pem私钥内容</p>
             */
            public static String WX_API_CLIENT_KEY = "wx_api_client_key";

            /**
             * 微信支付商户号
             * <p>微信支付平台分配的商户编号</p>
             */
            public static String WX_MCH_ID = "wx_mch_id";

            /**
             * 微信公钥
             * <p>微信支付平台公钥，用于验签回调通知</p>
             */
            public static String WX_PUB_KEY = "wx_pub_key";

            /**
             * 微信公钥ID
             * <p>微信支付平台公钥对应的唯一标识，用于V3接口验签</p>
             */
            public static String WX_PUB_KEY_ID = "wx_pub_key_id";

            /**
             * 微信V3密钥
             * <p>微信支付V3接口的APIv3密钥，用于加密/解密回调数据</p>
             */
            public static String WX_V3_KEY = "wx_v3_key";
        }
    }

    /**
     * 支付宝相关配置项
     * <p>包含网页端、小程序端的支付宝配置</p>
     */
    interface Alipay {
        /**
         * 支付宝网页端配置项
         * <p>PC/网页端支付宝支付相关配置</p>
         */
        class Web {
            /**
             * 支付宝网页端AppId
             * <p>支付宝开放平台分配的网页应用AppId</p>
             */
            public static String ALI_ACCOUNT_APP_ID = "ali_account_app_id";

            /**
             * 支付宝商户私钥
             * <p>商户侧生成的RSA私钥，用于签名请求</p>
             */
            public static String ALI_ACCOUNT_PRIVATE_KEY = "ali_account_private_key";

            /**
             * 支付宝公钥
             * <p>支付宝开放平台提供的公钥，用于验签回调通知</p>
             */
            public static String ALI_ACCOUNT_PUBLIC_KEY = "ali_account_public_key";

            /**
             * 阿里AES加密串
             * <p>支付宝接口数据加密所需的AES密钥</p>
             */
            public static String ALI_ENCRYPT_KEY = "ali_encrypt_key";

            /**
             * 支付宝网关
             * <p>支付宝开放平台接口网关地址（沙箱/生产环境）</p>
             */
            public static String ALI_GATEWAY = "ali_gateway";
        }

        /**
         * 支付宝小程序配置项
         * <p>支付宝小程序支付相关配置</p>
         */
        class Mini {
            /**
             * 支付宝小程序AppId
             * <p>支付宝开放平台分配的小程序AppId</p>
             */
            public static String ALI_MINI_APP_ID = "ali_mini_app_id";

            /**
             * 支付宝小程序支付私钥
             * <p>小程序支付专用的商户RSA私钥</p>
             */
            public static String ALI_MINI_PRIVATE_KEY = "ali_mini_private_key";

            /**
             * 支付宝小程序公钥
             * <p>支付宝开放平台提供的小程序专用公钥</p>
             */
            public static String ALI_MINI_PUBLIC_KEY = "ali_mini_public_key";
        }
    }

    /**
     * 阿里云相关配置项
     * <p>包含OSS对象存储、短信服务等阿里云产品配置</p>
     */
    class AliYun {
        /**
         * 阿里云OSS AccessSecret
         * <p>阿里云OSS服务的访问密钥Secret</p>
         */
        public static String ALI_OSS_ACCESS_SECRET = "ali_oss_access_secret";

        /**
         * 阿里云短信模板码
         * <p>阿里云短信服务审核通过的模板编号</p>
         */
        public static String ALI_SMS_TEMPLATE_CODE = "ali_sms_template_code";

        /**
         * 阿里云短信Secret
         * <p>阿里云短信服务的访问密钥Secret</p>
         */
        public static String ALI_SMS_SECRET = "ali_sms_secret";

        /**
         * 阿里云短信Key
         * <p>阿里云短信服务的访问密钥Key</p>
         */
        public static String ALI_SMS_KEY = "ali_sms_key";

        /**
         * 阿里云OSS角色ARN
         * <p>阿里云RAM角色的资源描述符，用于临时授权访问OSS</p>
         */
        public static String ALI_OSS_ROLE_ARN = "ali_oss_role_arn";

        /**
         * 阿里云OSS Endpoint
         * <p>阿里云OSS服务的地域节点地址</p>
         */
        public static String ALI_OSS_ENDPOINT = "ali_oss_endpoint";

        /**
         * 阿里云OSS AccessKey
         * <p>阿里云OSS服务的访问密钥Key</p>
         */
        public static String ALI_OSS_ACCESS_KEY = "ali_oss_access_key";
    }
}