package top.continew.admin.business.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import jakarta.validation.Valid;
import top.continew.admin.business.model.entity.TaskRecordHistoryDO;
import top.continew.admin.business.model.req.*;
import top.continew.admin.business.model.resp.BillingDeductResp;
import top.continew.admin.business.model.resp.TaskCallbackResp;

/**
 * 计费服务接口
 *
 * @author jiay
 * @since 2025/08/28 00:00
 */
public interface BillingService {

    /**
     * 扣减用户余额（本地计算费用）
     *
     * @param req 扣减请求
     * @return 扣减结果
     */
    BillingDeductResp judgeBalance(BillingJudgeReq req);

    /**
     * 扣减用户余额（第三方平台传入费用）
     *
     * @param req 扣减请求（包含预扣减金额）
     * @return 扣减结果
     */
    BillingDeductResp judgeBalanceWithAmount(BillingJudgeWithAmountReq req);

    /**
     * 任务完成回调（本地计算费用）
     *
     * @param req 回调请求
     * @return 回调结果
     */
    TaskCallbackResp taskCallback(TaskCallbackReq req);

    /**
     * 任务完成回调（第三方平台传入费用）
     *
     * @param req 回调请求（包含实际消费金额）
     * @return 回调结果
     */
    TaskCallbackResp taskCallbackWithAmount(TaskCallbackWithAmountReq req);

    Page<TaskRecordHistoryDO> queryTaskListByRootId(@Valid TaskQueryReq req);
}