package com.ga.core.mapper.commission;

import com.ga.core.vo.commission.ClawbackRecoveryVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * clawback_recovery Mapper — 상계 회수 이력 (V111)
 * 회수 생성/역전은 배치 전용, API 직접 호출 없음.
 */
@Mapper
public interface ClawbackRecoveryMapper {

    /** 회수 이력 단건 INSERT */
    int insertOne(ClawbackRecoveryVO vo);

    /** 채권 ID 기준 전체 회수 이력 조회 (상세 Resp 조립용) */
    List<ClawbackRecoveryVO> selectByReceivableId(@Param("receivableId") Long receivableId);

    /**
     * 채권 + 정산월 기준 회수 이력 조회 (역전 시 balance 복원 금액 확인용).
     */
    List<ClawbackRecoveryVO> selectByReceivableMonth(@Param("receivableId") Long receivableId,
                                                      @Param("settleMonth") String settleMonth);

    /**
     * 특정 정산월의 전체 회수 이력 조회.
     * 배치 reverse 단계에서 해당 월 회수 건을 일괄 조회 후 balance 복원에 사용.
     */
    List<ClawbackRecoveryVO> selectByMonth(@Param("settleMonth") String settleMonth);

    /**
     * 채권 + 정산월 기준 회수 이력 삭제 — 배치 역전(멱등 재실행) 지원.
     */
    int deleteByReceivableMonth(@Param("receivableId") Long receivableId,
                                 @Param("settleMonth") String settleMonth);

    /**
     * 정산월 단위 전체 회수 이력 삭제 — 월 전체 역전 시 사용.
     */
    int deleteByMonth(@Param("settleMonth") String settleMonth);
}
