package com.ruoyi.customer.service;

import java.util.List;
import com.ruoyi.system.domain.ChatHistory;
import com.ruoyi.system.domain.UserSessions;
import com.ruoyi.system.domain.ManualServiceSessions;

/**
 * 客服系统Service接口
 * 
 * @author ruoyi
 * @date 2024-01-01
 */
public interface ICustomerServiceService 
{
    /**
     * 查询用户会话
     * 
     * @param sessionId 用户会话ID
     * @return 用户会话
     */
    public UserSessions selectUserSessionsById(String sessionId);

    /**
     * 查询用户会话列表
     * 
     * @param userSessions 用户会话
     * @return 用户会话集合
     */
    public List<UserSessions> selectUserSessionsList(UserSessions userSessions);

    /**
     * 获取活跃会话列表
     * 
     * @return 活跃会话集合
     */
    public List<UserSessions> getActiveSessions();

    /**
     * 新增用户会话
     * 
     * @param userSessions 用户会话
     * @return 结果
     */
    public int insertUserSessions(UserSessions userSessions);

    /**
     * 修改用户会话
     * 
     * @param userSessions 用户会话
     * @return 结果
     */
    public int updateUserSessions(UserSessions userSessions);

    /**
     * 检查会话ID是否已存在
     * 
     * @param sessionId 会话ID
     * @return 是否存在
     */
    public boolean isSessionIdExists(String sessionId);

    /**
     * 批量删除用户会话
     * 
     * @param sessionIds 需要删除的用户会话ID
     * @return 结果
     */
    public int deleteUserSessionsByIds(String[] sessionIds);

    /**
     * 删除用户会话信息
     * 
     * @param sessionId 用户会话ID
     * @return 结果
     */
    public int deleteUserSessionsById(String sessionId);

    /**
     * 根据会话ID获取聊天记录
     * 
     * @param sessionId 会话ID
     * @return 聊天记录列表
     */
    public List<ChatHistory> getChatHistoryBySessionId(String sessionId);

    /**
     * 发送消息
     * 
     * @param chatHistory 聊天记录
     * @return 结果
     */
    public int sendMessage(ChatHistory chatHistory);

    /**
     * 创建转人工服务请求
     * 
     * @param manualServiceSessions 转人工服务会话
     * @return 结果
     */
    public int createManualServiceRequest(ManualServiceSessions manualServiceSessions);

    /**
     * 更新转人工服务请求
     * 
     * @param manualServiceSessions 转人工服务会话
     * @return 结果
     */
    public int updateManualServiceRequest(ManualServiceSessions manualServiceSessions);

    /**
     * 获取待处理的转人工请求
     * 
     * @return 转人工请求列表
     */
    public List<ManualServiceSessions> getPendingManualRequests();

    /**
     * 更新客服状态
     * 
     * @param serviceId 客服ID
     * @param status 状态
     * @return 结果
     */
    public int updateServiceStatus(Long serviceId, String status);

    /**
     * 获取今日会话数量
     * 
     * @return 会话数量
     */
    public int getTodaySessionCount();

    /**
     * 获取今日消息数量
     * 
     * @return 消息数量
     */
    public int getTodayMessageCount();

    /**
     * 获取待处理请求数量
     * 
     * @return 请求数量
     */
    public int getPendingRequestCount();

    /**
     * 获取在线客服数量
     * 
     * @return 客服数量
     */
    public int getOnlineServiceCount();

    /**
     * 查询聊天记录
     * 
     * @param messageId 聊天记录ID
     * @return 聊天记录
     */
    public ChatHistory selectChatHistoryById(Long messageId);

    /**
     * 查询聊天记录列表
     * 
     * @param chatHistory 聊天记录
     * @return 聊天记录集合
     */
    public List<ChatHistory> selectChatHistoryList(ChatHistory chatHistory);

    /**
     * 新增聊天记录
     * 
     * @param chatHistory 聊天记录
     * @return 结果
     */
    public int insertChatHistory(ChatHistory chatHistory);

    /**
     * 修改聊天记录
     * 
     * @param chatHistory 聊天记录
     * @return 结果
     */
    public int updateChatHistory(ChatHistory chatHistory);

    /**
     * 批量删除聊天记录
     * 
     * @param messageIds 需要删除的聊天记录ID
     * @return 结果
     */
    public int deleteChatHistoryByIds(Long[] messageIds);

    /**
     * 删除聊天记录信息
     * 
     * @param messageId 聊天记录ID
     * @return 结果
     */
    public int deleteChatHistoryById(Long messageId);

    /**
     * 查询转人工服务会话
     * 
     * @param id 转人工服务会话ID
     * @return 转人工服务会话
     */
    public ManualServiceSessions selectManualServiceSessionsById(Long id);

    /**
     * 查询转人工服务会话列表
     * 
     * @param manualServiceSessions 转人工服务会话
     * @return 转人工服务会话集合
     */
    public List<ManualServiceSessions> selectManualServiceSessionsList(ManualServiceSessions manualServiceSessions);

    /**
     * 新增转人工服务会话
     * 
     * @param manualServiceSessions 转人工服务会话
     * @return 结果
     */
    public int insertManualServiceSessions(ManualServiceSessions manualServiceSessions);

    /**
     * 修改转人工服务会话
     * 
     * @param manualServiceSessions 转人工服务会话
     * @return 结果
     */
    public int updateManualServiceSessions(ManualServiceSessions manualServiceSessions);

    /**
     * 批量删除转人工服务会话
     * 
     * @param ids 需要删除的转人工服务会话ID
     * @return 结果
     */
    public int deleteManualServiceSessionsByIds(Long[] ids);

    /**
     * 删除转人工服务会话信息
     * 
     * @param id 转人工服务会话ID
     * @return 结果
     */
    public int deleteManualServiceSessionsById(Long id);
    
    /**
     * 清理用户的待处理转人工记录
     * 
     * @param userId 用户ID
     * @return 清理数量
     */
    public int cleanupPendingManualRequests(Long userId);
    
    /**
     * 根据会话ID获取待处理的转人工记录
     * 
     * @param sessionId 会话ID
     * @return 转人工记录列表
     */
    public List<ManualServiceSessions> getPendingManualRequestsBySession(String sessionId);
    
    /**
     * 根据用户ID获取待处理的转人工记录
     * 
     * @param userId 用户ID
     * @return 转人工记录列表
     */
    public List<ManualServiceSessions> getPendingManualRequestsByUserId(Long userId);
    
    /**
     * 根据用户ID查找活跃的会话ID
     * 
     * @param userId 用户ID
     * @return 活跃的会话ID，如果没有则返回null
     */
    public String findActiveSessionByUserId(Long userId);
    
    /**
     * 根据ID获取转人工记录
     * 
     * @param requestId 记录ID
     * @return 转人工记录
     */
    public ManualServiceSessions getManualRequestById(Long requestId);
    
    /**
     * 通知用户转人工请求被接受
     * 
     * @param userId 用户ID
     * @param requestId 请求ID
     * @param serviceId 客服ID
     */
    public void notifyUserManualRequestAccepted(Long userId, Long requestId, Long serviceId);
    
    /**
     * 根据用户ID获取已接受状态的转人工记录
     * 
     * @param userId 用户ID
     * @return 已接受的转人工记录，如果没有则返回null
     */
    public ManualServiceSessions getAcceptedManualSessionByUserId(Long userId);
    
    /**
     * 清理客服的已接受转人工记录
     * 
     * @param serviceId 客服ID
     * @return 清理数量
     */
    public int cleanupAcceptedManualRequestsByServiceId(Long serviceId);
}