<?php

declare(strict_types=1);

namespace App\Controller;

use App\Tools\CommonService;
use App\Tools\PublicData;
use Hyperf\Di\Annotation\Inject;
use Hyperf\HttpServer\Contract\RequestInterface;
use Hyperf\Validation\Contract\ValidatorFactoryInterface;
use App\Request\FooRequest;
use App\Request\SceneRequest;
use App\Tools\Result;
use ZipArchive;


class IndexController extends AbstractController
{
    #[Inject]
    protected ValidatorFactoryInterface $validationFactory;

    public function index(RequestInterface $request){
        $validator = $this->validationFactory->make(
            $request->all(),
            [
                'foo' => 'required',
                'bar' => 'required',
            ],
            [
                'foo.required' => 'foo必填',
                'bar.required' => 'bar必填',
            ]
        );

        if ($validator->fails()){
            // Handle exception
            $errorMessage = $validator->errors()->first();
            var_dump($errorMessage);
        }
        // master123
    }

    public function verifyCode()
    {
        $comm = new CommonService();
        $ip = $comm->userIp();
        $redis = $this->container->get(\Hyperf\Redis\Redis::class);

        $config = new \EasySwoole\VerifyCode\Config();
        $code = new \EasySwoole\VerifyCode\VerifyCode($config);
        $img_code = '';
        $characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
        $charLength = strlen($characters);
        for ($i = 0; $i < 4; $i++) {
            $img_code .= $characters[rand(0, $charLength - 1)];
        }
        //重写验证码
        $result = $code->DrawCode((string)$img_code);
        $img_code = $result->getImageCode();
        $code_uniqid = uniqid("code");
        //写入缓存 用于其他方法验证 并且设置过期时间
        $redis->set($code_uniqid,$img_code,60000);

        return $result?Result::success(['code'=>$code_uniqid,'img'=>$result->getImageBase64()]):Result::error('失败');
//        return $result->getImageBase64();

    }

// test
      /**
     * 获取验证码
     */
    public function getverifyCode(){
        $comm = new CommonService();
        $ip = $comm->userIp();
        $redis = $this->container->get(\Hyperf\Redis\Redis::class);
        $img_code  =  $redis->get('code'.$ip);
        return Result::success($img_code);
    }

}