package com.seer.teach.mall.order.service;

import com.seer.teach.common.PageListBean;
import com.seer.teach.mall.request.AfterSaleDisagreeReq;
import com.seer.teach.mall.request.AfterSalePageReq;
import com.seer.teach.mall.request.AfterSaleRefuseReq;
import com.seer.teach.mall.response.AfterSaleResp;

import jakarta.validation.Valid;

/**
 * <p>
 *  售后服务类
 * </p>
 *
 * @author Captain
 * @since 2025-06-21
 */
public interface IAdminTradeAfterSaleService{

    /**
     * 查询售后申请的分页列表
     *
     * @param pageVO 包含分页查询条件的请求对象，使用@Valid注解进行参数校验
     * @return 返回一个IPage对象，其中包含符合查询条件的售后申请列表
     */
    PageListBean<AfterSaleResp> queryPageList(@Valid AfterSalePageReq pageVO);

    /**
     * 获取售后申请详情
     *
     * @param id 售后申请的标识符，用于指定要获取的申请详情
     * @param merchantUserId 商家用户的标识符，用于指定要获取的申请详情
     * @return 返回一个AfterSaleResp对象，其中包含售后申请详情
     */
    AfterSaleResp getTradeAfterSaleOrderDetail(Integer id,Integer merchantUserId);

    /**
     * 同意售后申请
     *
     * @param id 售后申请的标识符，用于指定要同意的申请
     * @param merchantUserId 用户的标识符
     * @return true表示是否成功同意了售后申请
     */
    boolean agreeAfterSaleApply(Integer id, Integer merchantUserId);

    /**
     * 商家同意售后申请
     *
     * @param id 售后申请的标识符，用于指定要同意的申请
     * @param merchantUserId 商家用户的userId
     * @return true表示是否成功同意了售后申请
     */

    boolean agreeAfterSaleApplyMerchant(Integer id, Integer merchantUserId);

    /**
     * 拒绝售后
     *
     * @param confirmReq 包含不同意售后申请所需信息的请求对象
     * @return true 表示成功，反之失败
     */
    boolean disagreeAfterSaleApply(AfterSaleDisagreeReq confirmReq, Integer userId);

    /**
     * 商家拒绝售后
     *
     * @param confirmReq 包含不同意售后申请所需信息的请求对象
     * @param merchantUserId 商家用户的userId
     * @return true 表示成功，反之失败
     */
    boolean disagreeAfterSaleApplyMerchant(AfterSaleDisagreeReq confirmReq, Integer merchantUserId);

    /**
     * 确认收货
     *
     * @param id 售后申请的标识符，用于指定要接收的申请
     * @param userId 确认收获的用户ID
     * @return true 表示成功，反之失败
     */
    boolean confirmReceive(Integer id, Integer userId);

    /**
     * 商家确认收货
     *
     * @param id 售后申请的标识符，用于指定要接收的申请
     * @param merchantUserId 确认收获的商家用户的标识符
     * @return true 表示成功，反之失败
     */
    boolean confirmReceiveMerchant(Integer id, Integer merchantUserId);

    /**
     * 拒绝收货
     *
     * @param refuseReqVO 包含拒绝售后申请所需信息的请求对象
     * @return true 表示成功，反之失败
     */
    boolean confirmRejection(AfterSaleRefuseReq refuseReqVO);

    /**
     * 商家拒绝收货
     *
     * @param refuseReqVO 包含拒绝售后申请所需信息的请求对象
     * @return true 表示成功，反之失败
     */
    boolean confirmRejectionMerchant(AfterSaleRefuseReq refuseReqVO, Integer merchantUserId);

    /**
     * 退款处理
     *
     * @param id 售后申请的标识符，用于指定要进行退款处理的申请
     * @return true 表示成功，反之失败
     */
    boolean refundAfterSale(Integer id);

}
