<?php

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

use App\JsonRpc\ChatServiceInterface;
use App\JsonRpc\UserServiceInterface;
use App\Service\RedisService;
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 ChatController
 * @package App\Controller
 */
//#[AutoController]
class ChatController extends AbstractController
{
    #[Inject]
    protected ValidatorFactoryInterface $validationFactory;
    /**
     * @var ChatServiceInterface
     */
    #[Inject]
    private $chatServiceClient;
    #[Inject]
    private UserServiceInterface $userServiceClient;
    // #[Inject]
    // private WebSocket $webSocketController;

    /**
     * 申请添加好友
     * @return array
     */
    public function addFriend()
    {
        $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'] = Context::get("UserId");
        //判断UserId是否是friend_id
        $userId = $requireData['user_id'];
        $friendId = $requireData['friend_id'];
        if ($userId == $friendId) {
            return Result::error('不能添加自己为好友');
        }
        //判断friend_id是否可用
        $friendInfo = $this->userServiceClient->getUserInfo((int) $friendId);
        if ($friendInfo['code'] == 0) {
            return Result::error('好友ID不存在');
        }
        $result = $this->chatServiceClient->addFriend($requireData);
       
        return $result ? Result::success($result['message']) : Result::error($result['message']);
    }

   
    /**
     * 话题分类
     * @return array
     */
    public function topicType()
    {
        $type = array(
            '1' => '课题',
            '2' => '维权',
            '3' => '讨论',
        );
        $result = array();
        foreach ($type as $k => $v) {
            $result[] = ['value' => $k, 'label' => $v];
        }
        return Result::success($result);
    }
    /**
     * 获取话题列表
     * @return array
     */
    public function topicStatus()
    {
        $status = array(
            '1' => '未审核',
            '2' => '已通过',
            '3' => '已拒绝',
        );
        $result = array();
        foreach ($status as $k => $v) {
            $result[] = ['value' => $k, 'label' => $v];
        }
        return Result::success($result);
    }

    /**
     * 搜索好友列表
     * @return array
     */
    public function searchFriend()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'keyword' => 'required',
            ],
            [
                'keyword.required' => '搜索关键字不能为空',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = Context::get("UserId");
        // return Result::success($requireData);
        $result = $this->chatServiceClient->searchFriend($requireData);
        return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 获取好友详情
     * @return array
     */
    public function getFriendInfo()
    {
        $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'] = Context::get("UserId");
        $result = $this->chatServiceClient->getFriendInfo($requireData);
        return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);

    }

    /**
     * 获取我的好友列表
     * @return array
     */
    public function getFriendsList()
    {
        $requireData = [];
        $requireData['user_id'] = Context::get("UserId");
        $requireData['status'] = 2;
        $result = $this->chatServiceClient->getFriendsList($requireData);
        return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 获取好友申请列表
     * @return array
     */
    public function getFriendsApplyList()
    {
        $requireData = [];
        $requireData['friend_id'] = Context::get("UserId");
        $requireData['status'] = 1;
        $result = $this->chatServiceClient->getFriendsApplyList($requireData);
        return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
    }

    /**
     * 好友申请审核通过或拒绝
     * @return array
     */
    public function applyFriend()
    {
        $requireData = $this->request->all();
        $frindid =$requireData['apply_id'];
        unset($requireData['apply_id']);
        // 定义验证规则
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'id' => 'required|integer',
                'status' => 'required|in:2,4',
            ],
            [
                'friend_id.required' => 'ID不能为空',
                'status.required' => '状态不能为空',
                'status.in' => '状态错误',
            ]
        );
        // 验证请求数据
        if ($validator->fails()) {
            var_dump($validator->errors()->all());
            return Result::error(implode(', ', $validator->errors()->all()), 0);
        }
        $requireData['user_id'] = Context::get("UserId");
        // var_dump($requireData,'1111test');
        $result = $this->chatServiceClient->applyFriend($requireData);
        if ($result && $result['code'] != 0) {
            $realResult = $result;
            $redisClient = new RedisService();
            $myFriends = $this->chatServiceClient->getFriendsList(['user_id' => $requireData['user_id'], 'status' => 2]);
            // var_dump($myFriends, '--------------------1');
            $redisClient->setUserFriends((string)$requireData['user_id'], $myFriends['data']);
            $myFriends = $this->chatServiceClient->getFriendsList(['user_id' => $frindid, 'status' => 2]);
            // var_dump($myFriends, '-------------3-------1');
            $redisClient->setUserFriends((string)$frindid, $myFriends['data']);
            $result =  $redisClient->getUserFriends((string)$requireData['user_id']);
            // var_dump($result,'redis-结果');
            $result =  $redisClient->getUserFriends((string)$frindid);
            // var_dump($result,'redis-结果');
            //redis 添加好友
            $result = $realResult;
        }
        return $result && $result['code'] != 0 ? Result::success($result['data']) :     Result::error($result['message']);
    }
     /**
     * 批量设置redis好友
     * @return array
     */
    public function setFriends()
    {
        //获取所有用户
        $userList = $this->userServiceClient->getUserList(['page' => 1, 'pageSize' => 1000 ]);
        //获取id,循环写入redis
        $userList = $userList['data']['rows'];
        var_dump($userList,'111111111111');
        
        $redisClient = new RedisService();
        foreach ($userList as $key => $value) {
            var_dump($value,'----------------------');
            $myFriends = $this->chatServiceClient->getFriendsList(['user_id' => $value['id'], 'status' => 2]);
            $redisClient->setUserFriends((string)$value['id'], $myFriends['data']);
        }
        return Result::success();
    }

    /**
     * 删除好友
     * @return array
     */
    public function delFriend()
    {
        $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'] = Context::get("UserId");
        $result = $this->chatServiceClient->delFriend($requireData);
        //redis 删除好友
        if ($result && $result['code'] != 0) {
            $redisClient = new RedisService();
            $myFriends = $this->chatServiceClient->getFriendsList(['user_id' => $requireData['user_id'], 'status' => 2]);
            $redisClient->setUserFriends((string)$requireData['user_id'], $myFriends['data']);

            $myFriends = $this->chatServiceClient->getFriendsList(['user_id' => $requireData['friend_id'], 'status' => 2]);
            $redisClient->setUserFriends((string)$requireData['friend_id'], $myFriends['data']);
        }
        return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
    }

    /**
     * 是否好友
     * @return array
     */
    public function isFriend()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'friend_id' => 'required',
            ],
            [
                'friend_id.required' => '好友ID不能为空',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->chatServiceClient->isFriend($requireData);
        return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
    }

    /**
     * 更新好友备注
     * @return array
     */
    public function updateFriend()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'friend_id' => 'required',
                'remark' => 'required',
            ],
            [
                'friend_id.required' => '好友ID不能为空',
                'remark.required' => '备注不能为空',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->chatServiceClient->updateFriend($requireData);
        return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 会话
     * @return array
     */
    public function getConversation()
    {
        $requireData = $this->request->all();
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->chatServiceClient->getConversation($requireData);
        return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 获取聊天记录
     * @return array
     */
    public function getChatRecords()
    {
        $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'] = Context::get("UserId");
        $result = $this->chatServiceClient->getChatRecords($requireData);
        return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 获取群聊天
     * @return array
     */
    public function getGroupChatRecords()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'group_id' => 'required',
            ],
            [
                'group_id.required' => '群ID不能为空',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->chatServiceClient->getGroupChatRecords($requireData);
        return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 获取群成员列表
     * @return array
     */
    public function getGroupMembers()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'group_id' => 'required',
            ],
            [
                'group_id.required' => '群ID不能为空',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->chatServiceClient->getGroupMembers($requireData);
        return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 获取群信息
     * @return array
     */
    public function getGroupInfo()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'group_id' => 'required',
            ],
            [
                'group_id.required' => '群ID不能为空',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->chatServiceClient->getGroupInfo($requireData);
        return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 获取群列表
     * @return array
     */
    public function getGroupList()
    {
        $requireData = $this->request->all();
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->chatServiceClient->getGroupList($requireData);
        return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 新建群
     * @return array
     */
    public function addGroup()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'group_name' => 'required',
                'group_desc' => 'required',
                // 'group_avatar' => 'required',
                // 'group_member' => 'required',
            ]
            ,
            [
                'group_name.required' => '群名称不能为空',
                'group_desc.required' => '群描述不能为空',
                // 'group_avatar.required' => '群头像不能为空',
                // 'group_member.required' => '群成员不能为空',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = Context::get("UserId");
        $requireData['group_member'] = explode(',', ($requireData['group_member']));
        $result = $this->chatServiceClient->addGroup($requireData);
        return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 退出群
     * @return array
     */
    public function quitGroup()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'group_id' => 'required',
            ],
            [
                'group_id.required' => '群ID不能为空',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->chatServiceClient->quitGroup($requireData);
        return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 删除群
     * @return array
     */
    public function delGroup()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'group_id' => 'required',
            ],
            [
                'group_id.required' => '群ID不能为空',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->chatServiceClient->delGroup($requireData);
        return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 删除群成员
     * @return array
     */
    public function delGroupMembers()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'group_id' => 'required',
                'group_member' => 'required',
            ],
            [
                'group_id.required' => '群ID不能为空',
                'group_member.required' => '群成员不能为空',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = Context::get("UserId");
        $requireData['group_member'] = explode(',', ($requireData['group_member']));
        $result = $this->chatServiceClient->delGroupMembers($requireData);
        return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 添加群成员
     * @return array
     */
    public function updateGroupMembers()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'group_id' => 'required',
                'group_member' => 'required',
            ],
            [
                'group_id.required' => '群ID不能为空',
                'group_member.required' => '群成员不能为空',
            ]
        );

        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = Context::get("UserId");
        $requireData['group_member'] = explode(',', ($requireData['group_member']));
        $result = $this->chatServiceClient->updateGroupMembers($requireData);
        return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
    }

    /**
     * 删除群成员
     * @return array
     */
    public function deleteGroupMember()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'group_id' => 'required',
                'group_member' => 'required',
            ],
            [
                'group_id.required' => '群ID不能为空',
                'group_member.required' => '群成员不能为空',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = Context::get("UserId");
        $requireData['group_member'] = explode(',', ($requireData['group_member']));
        $result = $this->chatServiceClient->deleteGroupMember($requireData);
        return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 加入群
     * @return array
     */
    public function joinGroup()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'group_id' => 'required',
            ],
            [
                'group_id.required' => '群ID不能为空',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->chatServiceClient->joinGroup($requireData);
        return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
    }

    /**
     * 更新群信息
     * @return array
     */
    public function updateGroup()
    {
        $requireData = $this->request->all();
        // 只接受指定的四个字段
        $validatedData = $this->validationFactory->make(
            $requireData,
            [
                'group_id' => 'required|string',
                'group_name' => 'nullable|string',
                'profile' => 'nullable|string',
                'avatar' => 'nullable|string',
            ],
            [
                'group_id.required' => '群ID不能为空',
                // 'group_name.required' => '群名称不能为空',
            ]
        );

        if ($validatedData->fails()) {
            $errorMessage = $validatedData->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->chatServiceClient->updateGroup($requireData);
        return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 获取商圈
     * @return array
     */
    public function getTopicsList()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'page' => 'required|integer',
                'page_size' => 'required|integer',
            ],
            [
                'page.required' => '页码不能为空',
                'page_size.required' => '每页数量不能为空',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->chatServiceClient->getTopicsList($requireData);
        return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 新增话题商圈
     * @return array
     */
    public function addTopic()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'title' => 'required|string',
                'type' => 'required|int',
                'content' => 'required|string',
            ],
            [
                'title.required' => '商圈名称不能为空',
                'type.required' => '商圈类型不能为空',
                'content.required' => '商圈内容不能为空',
                'type.int' => '商圈类型只能是数字',
                'content.string' => '商圈内容只能是字符串',
                'title.string' => '商圈名称只能是字符串',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->chatServiceClient->addTopic($requireData);
        return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 更新话题商圈
     * @return array
     */
    public function updateTopic()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'id' => 'required|string',
                // 'status' => 'required|integer',
            ],
            [
                'topic_id.required' => '商圈ID不能为空',
                // 'status.required' => '商圈状态不能为空',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->chatServiceClient->updateTopic($requireData);
        return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 删除话题商圈
     * @return array
     */
    public function delTopic()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'id' => 'required|string',
            ],
            [
                'id.required' => '商圈ID不能为空',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->chatServiceClient->delTopic($requireData);
        return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 获取商圈详情
     * @return array
     */
    public function getTopicInfo()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'id' => 'required|string',
            ],
            [
                'id.required' => '商圈ID不能为空',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->chatServiceClient->getTopicInfo($requireData);
        return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 获取商圈回复
     * @return array
     */
    public function addReply()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'id' => 'required|string',
                'content' => 'required|string',
            ],
            [
                'id.required' => '商圈ID不能为空',
                'content.required' => '回复内容不能为空',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->chatServiceClient->addReply($requireData);
        return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 获取商圈评论
     * @return array
     */
    public function getTopicReply()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'id' => 'required|string',
                'page' => 'required|integer',
                'page_size' => 'required|integer',
            ],
            [
                'id.required' => '商圈ID不能为空',
                'page.required' => '页码不能为空',
                'page_size.required' => '每页数量不能为空',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
            return Result::error($errorMessage);
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->chatServiceClient->getTopicReply($requireData);
        return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
    }
    
    
    /**
     * 获取 access_token
     * @return array
     */
    public function getAccessToken()
    {
        $url = env("WECHAT") . "cgi-bin/token?appid=" . env("APPID") . "&secret=" . env("APP_SECRET") . "&grant_type=client_credential";
        $result = PublicData::http_get($url);
        $resultData = json_decode($result, true);
        var_dump($url, $resultData);
        if (isset($resultData['errcode'])) {
            return Result::error($resultData['errmsg']);
        }
        return Result::success($resultData);
    }
    /**
     * 删除一条聊天记录
     * @return array
     */
    public function delRecords()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'id' => 'required',
            ],
            [
                'id.required' => '聊天记录ID不能为空',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->chatServiceClient->delRecords($requireData);
        return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 删除所有聊天记录
     * @return array
     */
    public function clearRecords()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'friend_id' => 'required',
            ],
            [
                'friend_id.required' => '聊天记录ID不能为空',
            ]
        );
        if ($validator->fails()) {
            $errorMessage =$validator->errors()->first();
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->chatServiceClient->clearRecords($requireData);
        return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 删除群聊记录
     * @return array
     */
    public function clearGroupRecords()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'id' => 'required',
            ],
            [
                'id.required' => '聊天记录ID不能为空',
            ]
        );
        if ($validator->fails()) {
            $errorMessage= $validator->errors()->first();
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->chatServiceClient->clearGroupRecords($requireData);
        return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 撤回一条聊天记录
     * @return array
     */
    public function recallRecord()
    { 

        $webSocketController = ApplicationContext::getContainer()->get(WebSocketController::class);
        $frame = new Frame();
        $frame->fd = 1; // 替换为实际的客户端 fd
        $frame->data = json_encode([
            'talk_type' => 1,
            'receiver_id' => 2, // 接收者 ID
            'content' => 'Hello, this is a test message!'
        ]);
    
        $webSocketController->send(1, 'Hello, World!');
        return Result::success('');
    
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'content' => 'required',
            ],
            [
                'content.required' => '聊天记录不能为空',
            ]
        );
        $requireData['user_id'] = Context::get("UserId");
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
        }
        //接入websocket,发送撤回消息
        $redisClient = new RedisService();
        $fd = $redisClient->findFd((int) 32);
        $maxRetries = 1;
        $retryCount = 0;
        $interval = 1; // 秒
        while ($retryCount < $maxRetries) {
            $response = $this->chatServiceClient->getRecordByContent($requireData);
            // 如果成功,返回结果
            if ($response['code'] === 0) {
                if(!empty($response['data']['id'])){
                    $records = $response['data'];
                    foreach($records as $record){
                        //判断 created_at 是否大于一分钟
                        $createdAt = strtotime($record['created_at']);
                        $currentTime = time();
                        $timeDifference = $currentTime - $createdAt;
                        if ($timeDifference > 60) {
                             return Result::error('超过一分钟,无法撤回');
                        }
                    }
                }
                $result = $this->chatServiceClient->recallRecord($response['data']);
                return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
            }
            // 如果失败,等待一段时间后重试
            sleep($interval);
            $retryCount++;
        }
        return Result::error('获取失败');
    }
    /**
     * 获取一条信息
     * @return array
     */
    public function getRecord()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'id' => 'required',
            ],
            [
                'id.required' => '聊天记录ID不能为空',
            ]
        );
        if ($validator->fails()) {
            $errorMessage= $validator->errors()->first();
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->chatServiceClient->getRecord($requireData);
            return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 删除一条topicRely
     * @return array
     */
    public function delReply()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'id' => 'required',
            ],
            [
                'id.required' => '回复ID不能为空',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->chatServiceClient->delReply($requireData);
        return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 删除所有回复
     * @return array
     */
    public function delAllReply()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'topicid' => 'required',
            ],
            [
                'topicid.required' => '回复ID不能为空',
            ]
        );
        if ($validator->fails()) {
            $errorMessage =$validator->errors()->first();
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->chatServiceClient->delAllReply($requireData);
        return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
    }
    /**
     * 获取所有Topic
     * @return array
     */
    public function getTopicsListAdmin()
    {
        $requireData = $this->request->all();
        $validator = $this->validationFactory->make(
            $requireData,
            [
                'page' => 'required',
                'limit' => 'required',
            ],
            [
                'page.required' => '页码不能为空',
                'limit.required' => '每页数量不能为空',
            ]
        );
        if ($validator->fails()) {
            $errorMessage = $validator->errors()->first();
        }
        $requireData['user_id'] = Context::get("UserId");
        $result = $this->chatServiceClient->getTopicsListAdmin($requireData);
        return $result && $result['code'] != 0 ? Result::success($result['data']) : Result::error($result['message']);
    }
    
}