<?php

namespace App\Services;

use App\Constants\HttpEnumCode;
use Extend\Alibaba\Dysms;
use Hyperf\Redis\Redis;
use Hyperf\Snowflake\IdGeneratorInterface;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;

/**
 * 验证码
 */
class CodeService extends BaseService
{
    /**
     * 获取登陆验证码
     * 5分钟内同一手机号请求三次
     * @return array
     * @throws ContainerExceptionInterface
     * @throws NotFoundExceptionInterface
     */
    public function getLoginPhoneCode(): array
    {
        $phone = $this->request->input('phone');

        $redis = $this->container->get(Redis::class);

        $redis_key = "login_code_count" . $phone;
        $result = $redis->get($redis_key);
        if (!empty($result)){
            if ( $result > 3){
                // 超出规定时间内最大获取次数
                return fail(HttpEnumCode::PHONE_MAXIMUM);
            }
        }

        $template_code = "SMS_243055263";

        $template_param = array();
        $template_param['code'] = mt_rand(1111,9999);

        // 发送短信
        Dysms::sendSms($phone,$template_param,$template_code,"获取验证码");

        if (empty($result)){
            $redis_value = 1;
        }else{
            $redis_value = $result + 1;
        }

        $res = $redis->set($redis_key,$redis_value,60*5);
        if (!$res){
            return fail(HttpEnumCode::SERVER_ERROR);
        }

        // 设置有效期
        $res = $redis->set("login_code" . $phone,$template_param['code'],60*30);
        if (!$res){
            return fail(HttpEnumCode::SERVER_ERROR);
        }

        return success();
    }
}