package com.ssyf.module.robot.service;

import com.github.pagehelper.PageInfo;
import com.ssyf.module.robot.domain.entity.RRobotConsumptionRecord;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ssyf.module.robot.domain.query.RRobotConsumptionRecordQuery;

import java.time.LocalDateTime;
import java.util.List;

/**
* @author ELSA
* @description 针对表【r_robot_consumption_record(机器人消费记录表)】的数据库操作Service
* @createDate 2025-12-18 10:00:17
*/
public interface RRobotConsumptionRecordService extends IService<RRobotConsumptionRecord> {
    /**
     * 创建消费记录
     * @param query
     * @return
     */
    RRobotConsumptionRecord addOne(RRobotConsumptionRecordQuery query);

    /**
     * 删除指定消费记录
     * @param uid
     */
    void removeByUid(String uid);
    void removeBatchByUids(List<String> uids);
    
    /**
     * 更新指定消费记录
     * @param uid
     * @param query
     */
    void updateByUid(String uid, RRobotConsumptionRecordQuery query);

    /**
     * 获取指定消费记录
     * @param uid
     * @return
     */
    RRobotConsumptionRecord getOneByUid(String uid);

    /**
     * 分页获取数据
     * @param query
     * @return
     */
    PageInfo<RRobotConsumptionRecord> getPage(RRobotConsumptionRecordQuery query);

    /**
     * 获取数据
     * @param query
     * @return
     */
    List<RRobotConsumptionRecord> getList(RRobotConsumptionRecordQuery query);

    /**
     * 检查记录是否存在并获取
     * @param uid
     * @return
     */
    RRobotConsumptionRecord checkedExistAndGet(String uid);

    /**
     * 总数统计
     * @param query
     * @return
     */
    Integer countBy(RRobotConsumptionRecordQuery query);

    /**
     * 统计指定时间范围内，该机器人送过礼的唯一主播数量 (用于校验 dailyAnchonum)
     * @param robotUuid 机器人UUID
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 唯一主播数
     */
    Integer countDistinctAnchors(String robotUuid, LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 统计指定时间范围内，该机器人给指定主播送礼的次数/批次 (用于校验 giftBatchNum)
     * @param robotUuid 机器人UUID
     * @param anchorId 主播ID
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 送礼次数
     */
    Integer countGiftsToAnchor(String robotUuid, String anchorId, LocalDateTime startTime, LocalDateTime endTime);
}
