package com.ga.core.mapper.settle;

import com.ga.core.vo.settle.SettleCorrectionResp;
import com.ga.core.vo.settle.SettleCorrectionSearchParam;
import com.ga.core.vo.settle.SettleCorrectionVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 정산 정정 이력 Mapper
 * settle_correction 테이블 CRUD + 상태 변경.
 */
@Mapper
public interface SettleCorrectionMapper {

    /** 정정 목록 조회 (페이징) */
    List<SettleCorrectionResp> selectList(SettleCorrectionSearchParam param);

    /** 정정 단건 조회 (응답 조인 포함) */
    SettleCorrectionResp selectById(@Param("correctionId") Long correctionId);

    /** 정정 단건 조회 (VO, 도메인 로직용) */
    SettleCorrectionVO selectVoById(@Param("correctionId") Long correctionId);

    /** 원본 정산 기준 정정 목록 */
    List<SettleCorrectionResp> selectByOriginalSettleId(@Param("originalSettleId") Long originalSettleId);

    /** 정정 등록 */
    int insert(SettleCorrectionVO vo);

    /** 상태 변경 (APPROVED/APPLIED/CANCELLED) */
    int updateStatus(@Param("correctionId") Long correctionId,
                     @Param("status") String status,
                     @Param("userId") Long userId);

    /** 정정 취소 */
    int cancel(@Param("correctionId") Long correctionId,
               @Param("cancelReason") String cancelReason,
               @Param("cancelledBy") Long cancelledBy);
}
