package com.trade.service.message;

import com.trade.common.exception.ServiceException;

import java.util.Random;

/**
 * @description: 短信模板
 * @Author: wanglang
 * @Date: 2024/3/30 14:20
 * @Version: 1.0
 */
public abstract class SmsTemplate {

    /***
     * 由不同的厂商来实现发送短信到手机上
     * 
     * @param mobile 手机号
     * @param templateCode 短信模板码值 枚举值
     * @param randomCode 验证码
     * @return 发送成功or 失败
     */
    protected abstract boolean manufacturer(String mobile, String templateCode, String randomCode);

    /**
     * 生成6位验证码
     * 
     * @return 验证码
     */
    public String genCode() {
        Random rd = new Random();
        String random = (rd.nextInt(900000) + 1000) + "";
        if (random.length() != 6) {
            return genCode();
        }
        return random;
    }

    /**
     * 发送方法 返回验证码
     * 
     * @param mobile 手机号
     * @return 验证码
     * @throws ServiceException
     */
    public String send(String mobile, String templateCode) throws ServiceException {
        String code = genCode();
        if (manufacturer(mobile, templateCode, code)) {
            return code;
        } else {
            throw new ServiceException("发送短信失败，请您稍后重试！");
        }
    }
}
