package org.dromara.chat.service;

import com.baomidou.mybatisplus.extension.service.IService;
import org.dromara.chat.domain.ChatUsageToken;
import org.dromara.chat.domain.bo.ChatUsageTokenBo;
import org.dromara.chat.domain.vo.ChatUsageTokenVo;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;

import java.util.Collection;
import java.util.List;

/**
 * 聊天Token使用记录Service接口
 *
 * @author pengles
 */
public interface ChatUsageTokenService extends IService<ChatUsageToken> {

    /**
     * 查询聊天Token使用记录
     */
    ChatUsageTokenVo queryById(Long id);

    /**
     * 查询聊天Token使用记录列表
     */
    TableDataInfo<ChatUsageTokenVo> queryPageList(ChatUsageTokenBo bo, PageQuery pageQuery);

    /**
     * 查询聊天Token使用记录列表
     */
    List<ChatUsageTokenVo> queryList(ChatUsageTokenBo bo);

    /**
     * 新增聊天Token使用记录
     */
    Boolean insertByBo(ChatUsageTokenBo bo);

    /**
     * 修改聊天Token使用记录
     */
    Boolean updateByBo(ChatUsageTokenBo bo);

    /**
     * 校验并批量删除聊天Token使用记录
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    /**
     * 根据用户ID查询Token使用记录列表
     */
    List<ChatUsageTokenVo> queryListByUserId(Long userId);

    /**
     * 根据模型名称查询Token使用记录列表
     */
    List<ChatUsageTokenVo> queryListByModelName(String modelName);

    /**
     * 统计用户总Token使用量
     */
    Long getTotalTokenByUserId(Long userId);

    /**
     * 统计模型总Token使用量
     */
    Long getTotalTokenByModelName(String modelName);

}