<?php

declare(strict_types=1);

namespace App\Middleware\Auth;

use Hyperf\Di\Annotation\Inject;
use Hyperf\HttpServer\Contract\RequestInterface;
use Hyperf\HttpServer\Contract\ResponseInterface as HttpResponse;
use Psr\Container\ContainerInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Server\RequestHandlerInterface;
use Hyperf\Context\Context;
use App\JsonRpc\WebsiteServiceInterface;
use Phper666\JWTAuth\JWT;
class PublicMiddleware implements MiddlewareInterface
{
    protected ContainerInterface $container;

    protected RequestInterface $request;

    protected HttpResponse $response;
    protected JWT $JWT;
    /**
     * @var WebsiteServiceInterface
     */
    #[Inject]
    private $websiteServiceClient;
    public function __construct(ContainerInterface $container, HttpResponse $response, RequestInterface $request,Jwt $JWT)
    {
        $this->container = $container;
        $this->response = $response;
        $this->request = $request;
        $this->JWT = $JWT;

    }

    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {

        $header = $request->getHeaders();
        try {
          
            if($header &&  isset($header['userurl']) && $header['userurl'][0]!='null' && isset($header['userurl'][0])){
                $origin = $header['userurl'][0];
                $data = [
                    'website_url'=>$origin
                ];

                $result = $this->websiteServiceClient->getWebsiteId($data);
                if(!isset($result['data']['id']) || !$result['data']['id']){
                    return $this->response->json(
                        [
                            'code' => -1,
                            'data' => [],

                            'message' => '网站不存在...',
                        ]
                    );
                }
//                var_dump($result['data']);
                // var_dump("获取站点id:",$result);
                Context::set("SiteId",$result['data']['id']);
                if($result['data']['id']==1){
                    Context::set("SiteId",0);
                }

                if ($result) {
                    return $handler->handle($request);
                }
            }else{
                return $this->response->json(
                    [
                        'code' => -1,
                        'data' => [],
                        'message' => 'userurl:必填',
                    ]
                );
            }

        }catch (\Exception $e){
//            var_dump("错误消息:",$e->getMessage(),$e->getCode());
            return $this->response->json(
                [
                    'code' => $e->getCode(),
                    'data' => [],
                    'message' => 'userurl必填:'.$e->getMessage(),
                ]
            );
        }
        return false;
    }
}