package com.ruoyi.bst.refund.service;

import com.ruoyi.bst.refund.domain.Refund;
import com.ruoyi.bst.refund.domain.RefundQuery;
import com.ruoyi.bst.refund.domain.RefundVO;
import com.ruoyi.common.domain.vo.LocalDateDecimalVO;
import com.ruoyi.common.domain.vo.LongDecimalVO;

import java.util.Arrays;
import java.util.List;

/**
 * 退款Service接口
 *
 * @author ruoyi
 * @date 2025-03-28
 */
public interface RefundService
{
    /**
     * 查询退款
     *
     * @param id 退款主键
     * @return 退款
     */
    public RefundVO selectRefundById(Long id);

    /**
     * 查询退款列表
     *
     * @param refund 退款
     * @return 退款集合
     */
    public List<RefundVO> selectRefundList(RefundQuery refund);

    /**
     * 新增退款
     *
     * @param refund 退款
     * @return 结果
     */
    public int insertRefund(Refund refund);

    /**
     * 修改退款
     *
     * @param refund 退款
     * @return 结果
     */
    public int updateRefund(Refund refund);

    /**
     * 批量删除退款
     *
     * @param ids 需要删除的退款主键集合
     * @return 结果
     */
    public int deleteRefundByIds(Long[] ids);

    /**
     * 删除退款信息
     *
     * @param id 退款主键
     * @return 结果
     */
    public int deleteRefundById(Long id);

    /**
     * 创建并执行退款
     * @param refund 退款PO
     * @return 结果
     */
    public int createRefund(Refund refund);

    /**
     * 处理退款成功
     * @param no 退款订单编号
     * @return 结果
     */
    public void handleRefundSuccess(String no);

    /**
     * 查询店铺退款金额
     * @param refundQuery
     * @return
     */
    List<LocalDateDecimalVO> selectRefundAmount(RefundQuery refundQuery);

    /**
     * 根据店铺ID统计退款金额
     * @param refundQuery
     * @return
     */
    List<LongDecimalVO> selectSumOfRefundAmountGroupByStoreId(RefundQuery refundQuery);
}
