package com.ruoyi.framework.config.properties;

import org.springframework.boot.context.properties.ConfigurationProperties;
import com.ruoyi.common.utils.StringUtils;

/**
 * 短信网关配置，绑定 {@code sms.*}。
 * <p>
 * 登录双因子使用阿里云 dysmsapi SDK（{@code alibabacloud-dysmsapi20170525}）。
 * 开发态可将 {@link Aliyun#dryRun} 设为 true，或在未配置 AccessKey 时自动仅写日志（Stub 行为）。
 * </p>
 *
 * @see com.ruoyi.framework.web.service.sms.AliyunSmsGatewayClient
 */
@ConfigurationProperties(prefix = "sms")
public class SmsProperties
{
    /** 网关类型，一期固定 aliyun */
    private String provider = "aliyun";

    private Aliyun aliyun = new Aliyun();

    public String getProvider()
    {
        return provider;
    }

    public void setProvider(String provider)
    {
        this.provider = provider;
    }

    public Aliyun getAliyun()
    {
        return aliyun;
    }

    public void setAliyun(Aliyun aliyun)
    {
        this.aliyun = aliyun;
    }

    /** 阿里云短信 SendSms 参数 */
    public static class Aliyun
    {
        /** 是否启用阿里云通道（false 时始终走日志 Stub） */
        private boolean enabled = true;

        /**
         * 开发态 Stub：true 时不调用阿里云 API，仅将验证码写入日志。
         * 未配置 accessKey 时也会自动降级为日志 Stub。
         */
        private boolean dryRun = true;

        private String accessKeyId = "";

        private String accessKeySecret = "";

        /** 短信签名（控制台已审核） */
        private String signName = "";

        /** 模板 CODE，模板变量须包含 {@code code}，如：您的验证码为 ${code} */
        private String templateCode = "";

        /** 地域，短信服务一般为 cn-hangzhou */
        private String region = "cn-hangzhou";

        /** 调用 SendSms 的超时时间（秒） */
        private int requestTimeoutSeconds = 10;

        public boolean isEnabled()
        {
            return enabled;
        }

        public void setEnabled(boolean enabled)
        {
            this.enabled = enabled;
        }

        public boolean isDryRun()
        {
            return dryRun;
        }

        public void setDryRun(boolean dryRun)
        {
            this.dryRun = dryRun;
        }

        public String getAccessKeyId()
        {
            return accessKeyId;
        }

        public void setAccessKeyId(String accessKeyId)
        {
            this.accessKeyId = accessKeyId;
        }

        public String getAccessKeySecret()
        {
            return accessKeySecret;
        }

        public void setAccessKeySecret(String accessKeySecret)
        {
            this.accessKeySecret = accessKeySecret;
        }

        public String getSignName()
        {
            return signName;
        }

        public void setSignName(String signName)
        {
            this.signName = signName;
        }

        public String getTemplateCode()
        {
            return templateCode;
        }

        public void setTemplateCode(String templateCode)
        {
            this.templateCode = templateCode;
        }

        public String getRegion()
        {
            return region;
        }

        public void setRegion(String region)
        {
            this.region = region;
        }

        public int getRequestTimeoutSeconds()
        {
            return requestTimeoutSeconds;
        }

        public void setRequestTimeoutSeconds(int requestTimeoutSeconds)
        {
            this.requestTimeoutSeconds = requestTimeoutSeconds;
        }

        /** AccessKey、签名、模板均已配置，可发起真实 SendSms */
        public boolean isRemoteSendReady()
        {
            return StringUtils.isNotEmpty(accessKeyId)
                    && StringUtils.isNotEmpty(accessKeySecret)
                    && StringUtils.isNotEmpty(signName)
                    && StringUtils.isNotEmpty(templateCode);
        }

        /** 是否应走日志 Stub（不调用阿里云） */
        public boolean shouldUseLogStub()
        {
            return !enabled || dryRun || !isRemoteSendReady();
        }
    }
}
