package com.sonic.frog.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.sonic.frog.domain.entity.AiUserStat;
import com.sonic.frog.domain.output.AiUserStatOutput;
import com.sonic.frog.event.inner.payload.AiUserStatPayload;

import java.util.List;
import java.util.Map;

/**
 * AI用户统计业务接口
 */
public interface AiUserStatService extends IService<AiUserStat> {

    /**
     * 获取Ai用户统计数据
     *
     * @param aiId
     * @return
     */
    AiUserStatOutput getAiUserStatByAiId(Long aiId, Long currentUserId);

    /**
     * ai被创建时，初始化Ai用户统计数据
     *
     * @param aiId
     */
    void initAiUserStat(Long aiId);

    /**
     * AI用户统计-MQ消费
     *
     * @param payload
     */
    void aiUserStat(AiUserStatPayload payload);

    /**
     * 用户点赞或取消点赞时，更新Ai用户点赞数
     *
     * @param aiId
     * @param num  取消点赞为-1，点赞为1
     */
    void updateLikeNum(Long aiId, Integer num);

    /**
     * 每20轮对话时，增加Ai用户聊天数
     *
     * @param aiId
     */
    void increaseChatNum(Long aiId);

    /**
     * 定时任务更新未达到20次时，增加Ai用户聊天数
     *
     * @param aiId
     * @param num
     */
    void increaseChatNum(Long aiId, Integer num);


    /**
     * 新用户与AI聊天时，增加与Ai聊过天的会话数
     *
     * @param aiId
     */
    void increaseConversationNum(Long aiId);

    /**
     * 礼物打赏或其他场景 增加Ai用户金币数 Crush Coin数需要扣除平台服务费用
     *
     * @param aiId
     * @param coinNum
     */
    void increaseCoinNum(Long aiId, Long coinNum);

    /**
     * 批量查询Ai用户点赞数
     *
     * @param aiIds
     * @return
     */
    Map<Long, Integer> queryAiLikedCount(List<Long> aiIds);

    /**
     * 获取Ai用户点赞数
     *
     * @param aiId
     * @return
     */
    Integer getAiLikedCount(Long aiId);
}