<?php

namespace  Api\PhpServices\Sms;

use Api\PhpUtils\Common\TimeOut;
use Api\PhpUtils\Http\Request;
use App\Exception\custom\CodeSpecialException;

class Sms
{
    /**
     * 验证短信是否正确
     *
     * @param $params['mobile'] 手机号
     * @param $params['code'] 验证码
     * @param $params['appid'] appid
     */
    public function checkSmsCode($params)
    {
        $url = config('interface','service.user.check_sms_code');
        if(!$url){
            throw new CodeSpecialException("failed");
        }

        if (empty($params)) {
            throw new CodeSpecialException("failed");
        }

        $params = [
            'mobile' => !empty($params['mobile']) ? $params['mobile'] : '',
            'appid' => !empty($params['appid']) ? $params['appid'] : '',
            'code' => !empty($params['code']) ? $params['code'] : '',
            'key' => 'f16bdd46292480b4b82c841d90a6ba02',
            'partner' => !empty($params['appid']) ? $params['appid'] : '',
        ];
    
        $sms  = (new TimeOut())->runGet($url, $params);
        if(!$sms){
            throw new CodeSpecialException("timeout");
        }

        if (!empty($sms) && $sms['code'] == 0) {
            return true;
        }else{
            return false;
        }
    }

    /**
     * 发送验证码
     *
     * @param $params['mobile'] 手机号
     * @param $params['appid'] appid
     * @param $params['scene'] 使用场景 例如： 登陆传login
     * @param $params['template'] 模版id，发送短信模版
     * @param $params['code_lenght'] 短信验证码长度 4位和6位
     * @param $params['ticket_expire'] 验证码验证周期，默认86400秒（1天），最小值为60秒，少于最小值使用默认值
     * @param $params['resend_times'] 验证周期内验证码最大发送次数，默认重发最多10次，最小值为1次，少于最小值使用默认值
     * @param $params['retry_times']验证周期内每个验证码最大可校验次数，默认每个验证码最大可校验10次，最小值为1次，少于最小值使用默认值
     *
     */
    public function sendSmsCode($params = [])
    {
        $url = config('interface','service.user.send_sms_code');
        if(!$url){
            throw new CodeSpecialException("failed");
        }

        if (empty($params)) {
            throw new CodeSpecialException("failed");
        }

        $params = [
            'mobile' => !empty($params['mobile']) ? $params['mobile'] : '',
            'appid' => !empty($params['appid']) ? $params['appid'] : 'hubble',
            'scene' => !empty($params['scene']) ? $params['scene'] : '',
            'key' => 'f16bdd46292480b4b82c841d90a6ba02',
            'partner' => !empty($params['appid']) ? $params['appid'] : '',
            'template' => !empty($params['template']) ? $params['template'] : 7,
            'code_lenght' => !empty($params['code_lenght']) ? $params['code_lenght'] : 6,
            'ticket_expire' => !empty($params['ticket_expire']) ? $params['ticket_expire'] : 86400,
            'resend_times' => !empty($params['resend_times']) ? $params['resend_times'] : 5,
            'retry_times' => !empty($params['retry_times']) ? $params['retry_times'] : 10,
            'code_expire' => !empty($params['code_expire']) ? $params['code_expire'] : 600,
        ];
    
        $sms  = (new TimeOut())->runGet($url, $params);
        if(!$sms){
            throw new CodeSpecialException("timeout");
        }

        if (!empty($sms) && $sms['code'] == 0) {
            return $sms;
        }else{
            return $sms;
        }
    }
    
    /**
     * 发送短信，不需要验证，场景是，只发，例如：审核通过，发个通知短信，审核驳回，发一个通知短信
     *
     * @param $mobile 手机号
     * @param $template  短信模版
     * @param $param = [] 数组，多个参数传值
     */
    public function messageSendSms($mobile,$template,$param = [])
    {
        $url = config('interface', 'service.message.send_sms');
        if (!$url) {
            throw new CodeSpecialException("failed");
        }
        $params = [
            'mobile' => $mobile,
            'key' => 'b2acfb0d53c8557c9b0a0346d2a4fab4',
            'template' => $template,
            'param' => $param,
        ];

        $sms  = (new TimeOut())->runGet($url, $params);
        if (!$sms) {
            throw new CodeSpecialException("timeout");
        }
        if (!empty($sms) && $sms['code'] == 0) {
            return true;
        } else {
            return false;
        }
    }
}
