package org.dromara.talk.service;

import org.dromara.talk.domain.vo.TalkAgentVo;
import org.dromara.talk.domain.bo.TalkAgentBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.Collection;
import java.util.List;

/**
 * 客服配置Service接口
 *
 * @author Lion Li
 * @date 2026-01-27
 */
public interface ITalkAgentService {

    /**
     * 查询客服配置
     *
     * @param id 主键
     * @return 客服配置
     */
    TalkAgentVo queryById(Long id);

    /**
     * 分页查询客服配置列表
     *
     * @param bo        查询条件
     * @param pageQuery 分页参数
     * @return 客服配置分页列表
     */
    TableDataInfo<TalkAgentVo> queryPageList(TalkAgentBo bo, PageQuery pageQuery);

    /**
     * 查询符合条件的客服配置列表
     *
     * @param bo 查询条件
     * @return 客服配置列表
     */
    List<TalkAgentVo> queryList(TalkAgentBo bo);

    /**
     * 新增客服配置
     *
     * @param bo 客服配置
     * @return 是否新增成功
     */
    Boolean insertByBo(TalkAgentBo bo);

    /**
     * 修改客服配置
     *
     * @param bo 客服配置
     * @return 是否修改成功
     */
    Boolean updateByBo(TalkAgentBo bo);

    /**
     * 校验并批量删除客服配置信息
     *
     * @param ids     待删除的主键集合
     * @param isValid 是否进行有效性校验
     * @return 是否删除成功
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    /**
     * 上传客服头像
     *
     * @param file 上传的文件
     * @return 文件访问路径
     * @throws IOException IO异常
     */
    String uploadAvatar(MultipartFile file) throws IOException;

    /**
     * 改变客服状态（带并发控制）
     *
     * @param id        客服ID
     * @param newStatus 新状态
     * @return 是否修改成功
     */
    Boolean changeAgentStatus(Long id, String newStatus);

    /**
     * 根据用户ID查询客服
     *
     * @param userId 用户ID
     * @return 客服配置
     */
    TalkAgentVo queryByUserId(Long userId);
}
