package com.ssyf.module.robot.service;

import com.github.pagehelper.PageInfo;
import com.ssyf.module.robot.domain.entity.RRobotAccount;
import com.ssyf.module.robot.domain.entity.RRobotFee;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ssyf.module.robot.domain.query.RRobotFeeQuery;
import com.ssyf.module.robot.domain.vo.FeeStatistics;

import java.util.List;

/**
* @author ELSA
* @description 针对表【r_robot_fee(机器人费用记录表)】的数据库操作Service
* @createDate 2025-12-12 10:19:24
*/
public interface RRobotFeeService extends IService<RRobotFee> {
    /**
     * 创建费用记录
     * @param query
     * @return
     */
    RRobotFee addOne(RRobotFeeQuery query);

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

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

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

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

    RRobotFee checkedExistAndGet(String uid);

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

    /**
     * 获取机器人可用的费用记录（带缓存）
     * @param robotAccount 机器人UUID
     * @return 可用的费用记录，null表示没有可用记录
     */
    RRobotFee getOneAvailable(RRobotAccount robotAccount);

//    /**
//     * 更新机器人已使用金额
//     * @param robotUuid 机器人UUID
//     * @param usedAmount 已使用金额
//     * @return 是否更新成功
//     */
//    boolean updateUsedAmount(String robotUuid, Double usedAmount);


    FeeStatistics getFeeStatistics();

    boolean updateFeeAfterGift(String feeUid, String robotUuid, double changeInApply, double changeInUsed);
}
