package com.huimv.employment.integration.sms;

import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 短信发送器自动配置：根据 {@code fe.sms.mock-enabled} 切换 Mock 与阿里云实现。
 * <p>
 * 两种实现均注册为 {@link SmsSender} 接口，业务层（{@link com.huimv.employment.service.sms.SmsCodeService}）
 * 无需感知具体通道，符合依赖倒置原则。
 * </p>
 */
@Configuration
public class SmsAutoConfiguration {

    /**
     * Mock 模式（默认）：本地开发/测试环境使用，仅打日志不调用第三方。
     * {@code matchIfMissing = true} 表示未配置 mock-enabled 时也走 Mock，保证开箱即用。
     */
    @Bean
    @ConditionalOnProperty(prefix = "fe.sms", name = "mock-enabled", havingValue = "true", matchIfMissing = true)
    public SmsSender smsSender() {
        return new MockSmsSender();
    }

    /**
     * 生产模式：使用阿里云 dysmsapi20170525 SDK 发送真实短信。
     * 需正确配置 {@link SmsProperties.Aliyun} 中的 AccessKey、签名、模板等参数。
     */
    @Bean
    @ConditionalOnProperty(prefix = "fe.sms", name = "mock-enabled", havingValue = "false")
    public SmsSender aliyunSmsSender(SmsProperties smsProperties) {
        return new AliyunSmsSender(smsProperties);
    }
}
