package com.ga.core.mapper.settle;

import com.ga.core.vo.settle.CommissionDisputeResp;
import com.ga.core.vo.settle.CommissionDisputeSearchParam;
import com.ga.core.vo.settle.CommissionDisputeVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

/**
 * 수수료 이의신청 Mapper
 * commission_dispute 테이블 CRUD + 상태 변경.
 */
@Mapper
public interface CommissionDisputeMapper {

    /** 이의신청 목록 조회 (페이징) */
    List<CommissionDisputeResp> selectList(CommissionDisputeSearchParam param);

    /** 이의신청 단건 조회 (응답 조인 포함) */
    CommissionDisputeResp selectById(@Param("disputeId") Long disputeId);

    /** 이의신청 단건 조회 (VO, 도메인 로직용) */
    CommissionDisputeVO selectVoById(@Param("disputeId") Long disputeId);

    /** 이의신청 등록 */
    int insert(CommissionDisputeVO vo);

    /** 검토 시작 (IN_REVIEW 상태 전환) */
    int startReview(@Param("disputeId") Long disputeId,
                    @Param("reviewerId") Long reviewerId);

    /** 이의신청 처리 결과 등록 (APPROVED/REJECTED) */
    int resolve(@Param("disputeId") Long disputeId,
                @Param("status") String status,
                @Param("resolution") String resolution,
                @Param("adjustmentAmount") BigDecimal adjustmentAmount,
                @Param("correctionId") Long correctionId,
                @Param("resolvedBy") Long resolvedBy);
}
