package com.snack.server.module.chat.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.snack.server.module.chat.dto.req.ChatSessionPageReq;
import com.snack.server.module.chat.entity.ChatSession;
import com.snack.server.module.chat.vo.ChatSessionDetailVO;
import com.snack.server.module.chat.vo.ChatSessionVO;

import java.util.List;

/**
 * 客服会话服务
 */
public interface ChatSessionService {

    /**
     * 获取用户当前进行中的会话（最近一条非关闭状态）
     */
    ChatSession getOrCreateActiveSessionForUser(Long userId);

    /**
     * 用户发起 / 恢复会话；没有就创建并返回
     */
    ChatSession createOrRestoreForUser(Long userId);

    /**
     * 客服接管（分配给自己）
     *
     * @return 接管后的会话
     */
    ChatSession acceptByAdmin(Long sessionId, Long adminId, String adminName);

    /**
     * 转接给其他客服
     */
    ChatSession transferToAdmin(Long sessionId, Long fromAdminId, Long toAdminId);

    /**
     * 关闭会话
     */
    void closeSession(Long sessionId, Long operatorId, boolean isAdmin);

    /**
     * 更新会话状态（处理中 / 已解决）
     */
    void updateStatus(Long sessionId, Integer status, Long operatorId);

    /**
     * 分页查询（管理端）
     */
    Page<ChatSessionVO> pageSessions(ChatSessionPageReq req, Long currentAdminId);

    /**
     * 会话详情
     */
    ChatSessionDetailVO getDetail(Long sessionId);

    /**
     * 单条会话的简单 VO（不含未读视角填充）
     */
    ChatSessionVO toVO(ChatSession session);

    /**
     * 按 ID 取
     */
    ChatSession getById(Long sessionId);

    /**
     * 用户最近一次会话（任意状态）
     */
    List<ChatSession> listByUser(Long userId);
}
