<?php

declare(strict_types=1);

namespace App\Controller;

use App\JsonRpc\ChatServiceInterface;
use App\JsonRpc\UserServiceInterface;
use App\JsonRpc\ClientServiceInterface;
use Hyperf\HttpServer\Contract\RequestInterface;

use App\Tools\PublicData;
use App\Tools\Result;
use function Hyperf\Support\env;
use Hyperf\Context\Context;
use Hyperf\Di\Annotation\Inject;
use Hyperf\Validation\Contract\ValidatorFactoryInterface;
// use App\Controller\WebSocketController as WebSocket;
use Hyperf\Context\ApplicationContext as ApplicationContext;
use App\Controller\WebSocketController;
use Swoole\WebSocket\Frame;

/**
 *
 * Class ClientController
 * @package App\Controller
 */
//#[AutoController]
class ClientController extends AbstractController
{
    #[Inject]
    protected ValidatorFactoryInterface $validationFactory;
    #[Inject]
    private  ChatServiceInterface $chatServiceClient;
    #[Inject]
    private UserServiceInterface $userServiceClient;
    #[Inject]
    private ClientServiceInterface $clientServiceClient;
    public function __construct(
        ClientServiceInterface $clientServiceClient,
        ValidatorFactoryInterface $validationFactory,
        ChatServiceInterface $chatServiceClient,
        RequestInterface $request,
        UserServiceInterface $userServiceClient
    ) {
        $this->clientServiceClient = $clientServiceClient;
        $this->validationFactory = $validationFactory;
        $this->chatServiceClient = $chatServiceClient;
        $this->userServiceClient = $userServiceClient;
        $this->request = $request;
    }
    public function test()
    {
        // var_dump($this->validationFactory, '----------2-------');
        $test = $this->clientServiceClient->test(['name' => 'test']);
        return Result::success($test);
    }

    public function indexData()
    {
        $request_data = $this->request->all();
        var_dump($request_data, '---------------');
        $data = $this->clientServiceClient->indexData($request_data);
        var_dump($data, '-----1----------');
        return Result::success($data);
    }
    public function addWeb()
    {
        $request_data = $this->request->all();
        //校验数据
        var_dump($request_data, '---------------');
        $validator = $this->validationFactory->make(
            $request_data,
            [
                'website_id' => 'required'
            ],
            [
                'website_id.required' => 'website_id is required'
            ]
        );
        if ($validator->fails()) {
            return Result::error($validator->errors()->first());
        }
        $request_data['user_id'] =  Context::get("UserId");
        // $request_data['website_id'] = Context::get("SiteId");
        $result = $this->clientServiceClient->addWeb($request_data);
        return $result ? Result::success($result['data']) : Result::error($result['message']);
    }
    public function deleteWeb()
    {
        $request_data = $this->request->all();
        $result = $this->clientServiceClient->deleteWeb($request_data);
        return $result ? Result::success($result['data']) : Result::error($result['message']);
    }
    public function getWebInfo()
    {
        $request_data = $this->request->all();
        $validator = $this->validationFactory->make(
            $request_data,
            [
                'id' => 'required',
            ],
            [
                'id.required' => 'ID必填',
            ]
        );
        if ($validator->fails()) {
            return Result::error($validator->errors()->first());
        }
        $result = $this->clientServiceClient->getWebInfo($request_data);
        return $result ? Result::success($result['data']) : Result::error($result['message']);
    }
    public function updateWeb()
    {

        $request_data = $this->request->all();
        $validator = $this->validationFactory->make(
            $request_data,
            [
                'id' => 'required',
                'port' => 'required',
                'dir' => 'required',
            ],
            [
                'id.required' => 'ID必填',
                'port.required' => 'Port必填',
                'dir.required' => '路径必填'
            ]
        );
        $result = $this->clientServiceClient->updateWeb($request_data);
        return $result ? Result::success($result['data']) : Result::error($result['message']);
    }
    public function getWebList()
    {
        $request_data = $this->request->all();
        $validator = $this->validationFactory->make(
            $request_data,
            [
                'page' => 'required',
                'pageSize' => 'required'
            ],
            [
                'page.required' => 'Page is required',
                'pageSize.required' => 'Page size is required'
            ]
        );

        if ($validator->fails()) {
            return Result::error($validator->errors()->first());
        }
        $result = $this->clientServiceClient->getWebList($request_data);
        return $result ? Result::success($result['data']) : Result::error($result['message']);
    }
    public function updateWebConfig()
    {
        $request_data = $this->request->all();
        $data = $this->clientServiceClient->updateWebConfig($request_data);
        return $data ? Result::success($data['data']) : Result::error($data['message']);
    }
    public function updateWebOutput()
    {
        $request_data = $this->request->all();
        $data = $this->clientServiceClient->updateWebOutput($request_data);
    }
    public function updateWebMove()
    {
        $request_data = $this->request->all();
        $data = $this->clientServiceClient->updateWebMove($request_data);
    }
    public function runWeb()
    {
        $request_data = $this->request->all();
        $data = $this->clientServiceClient->runWeb($request_data);
    }
}