<?php

declare (strict_types=1);
namespace App\Controller;

use App\JsonRpc\ChatServiceInterface;
use App\Tools\PublicData;
use Hyperf\Di\Annotation\Inject;
use Hyperf\HttpServer\Annotation\AutoController;
use App\Tools\Result;
use Hyperf\Validation\Contract\ValidatorFactoryInterface;
use App\Amqp\Producer\DemoProducer;
use Hyperf\Context\ApplicationContext;
use App\Amqp\Producer;
use Hyperf\Snowflake\IdGeneratorInterface;
/**
 *
 * Class ChatController
 * @package App\Controller
 */
#[AutoController]
class ChatController extends AbstractController
{
    use \Hyperf\Di\Aop\ProxyTrait;
    use \Hyperf\Di\Aop\PropertyHandlerTrait;
    function __construct(\Hyperf\Logger\LoggerFactory $loggerFactory)
    {
        if (method_exists(parent::class, '__construct')) {
            parent::__construct(...func_get_args());
        }
        $this->__handlePropertyHandler(__CLASS__);
    }
    #[Inject]
    protected ValidatorFactoryInterface $validationFactory;
    /**
     * @var ChatServiceInterface
     */
    #[Inject]
    private $chatServiceClient;
    /**
     * 申请添加好友
     * @return array
     */
    public function addContactApply()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make($requireData, ['friend_id' => 'required'], ['friend_id.required' => '好友ID不能为空']);
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = $this->UserId;
        $result = $this->chatServiceClient->addContactApply($requireData);
        return $result ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 获取我的好友申请列表
     * @return array
     */
    public function getContactApplyList()
    {
        $requireData = [];
        $requireData['user_id'] = $this->UserId;
        $result = $this->chatServiceClient->getContactApplyList($requireData);
        return $result ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 好有审核通过或拒绝
     * @return void
     */
    public function updateContactApply()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make($requireData, ['friend_id' => 'required', 'type' => 'required'], ['friend_id.required' => '好友ID不能为空', 'type.required' => '操作状态不能为空']);
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = $this->UserId;
        //type==1 同意 type==2 拒绝
        $result = $this->chatServiceClient->updateContactApply($requireData);
        if ($requireData['type'] == 1) {
        }
        return $result ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 删除好友
     * @return array
     */
    public function delContact()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make($requireData, ['friend_id' => 'required'], ['friend_id.required' => '好友ID不能为空']);
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = $this->UserId;
        $result = $this->chatServiceClient->delContact($requireData);
        return $result ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 获取好友列表
     * @return array
     */
    public function getContactList()
    {
        $requireData = $this->request->all();
        $requireData['user_id'] = $this->UserId;
        $requireData['keyWord'] = $this->request->input('keyWord', '');
        $result = $this->chatServiceClient->getContactList($requireData);
        return $result ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 获取会话列表
     * @return array
     */
    public function getTalkSessionList()
    {
        $requireData = $this->request->all();
        $requireData['user_id'] = $this->UserId;
        var_dump("会话列表:", $requireData);
        $result = $this->chatServiceClient->getTalkSessionList($requireData);
        var_dump($result);
        if ($result['data']['row']) {
            foreach ($result['data']['row'] as $k => $v) {
                $result['data']['row'][$k]['messages'] = [];
            }
        }
        return $result ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 创建用户群
     * @return array
     */
    public function addTalkGroup()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make($requireData, ['group_name' => 'required', 'user_id_arr' => 'required'], ['group_name.required' => '群名称不能为空', 'user_id_arr.required' => '好友ID不能为空']);
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = $this->UserId;
        $userIdArr = array(json_decode($requireData['user_id_arr']));
        $requireData['user_id_arr'] = $userIdArr[0];
        $requireData['user_id_arr'][] = $this->UserId;
        var_dump($requireData);
        $result = $this->chatServiceClient->addTalkGroup($requireData);
        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 会话详情
     * @return void
     */
    public function getTalkRecordsList()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make($requireData, ['session_id' => 'required', 'talk_type' => 'required'], ['session_id.required' => '会话ID不能为空', 'talk_type.required' => '会话类型不能为空']);
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['page'] = $requireData['page'] ?? 1;
        $requireData['pageSize'] = $requireData['pageSize'] ?? 30;
        $result = $this->chatServiceClient->getTalkRecordsList($requireData);
        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 添加聊天
     * @return void
     */
    public function addTalkRecords()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make($requireData, ['type' => 'required', 'content' => 'required', 'receiver' => 'required'], ['type.required' => '消息类型不能为空', 'content.required' => '内容不能为空', 'receiver.required' => '会话信息不能为空']);
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = $this->UserId;
        $result = $this->chatServiceClient->addTalkRecords($requireData);
        return $result['code'] == 200 ? Result::success($result['data']) : Result::error($result['message']);
    }
}