package com.ga.core.mapper.settle;

import com.ga.core.vo.settle.ChargebackResp;
import com.ga.core.vo.settle.ChargebackSearchParam;
import com.ga.core.vo.settle.ChargebackVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

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

@Mapper
public interface ChargebackMapper {
    int insert(ChargebackVO vo);
    int insertBatch(@Param("list") List<ChargebackVO> list);
    List<ChargebackVO> selectByAgent(@Param("agentId") Long agentId,
                                     @Param("settleMonth") String settleMonth);
    int updatePaid(@Param("cbId") Long cbId,
                   @Param("paidAmount") BigDecimal paidAmount,
                   @Param("status") String status);

    List<Map<String, Object>> aggregateByAgent(@Param("settleMonth") String settleMonth);
    BigDecimal sumByMonth(@Param("settleMonth") String settleMonth);

    // ── P10 환수자료 업로드 / 조회 ──────────────────────────────────────────
    /** 환수 목록 조회 (agentName / contractorName 조인 포함). PageHelper 페이징 사용. */
    List<ChargebackResp> selectList(ChargebackSearchParam param);

    /** 환수 목록 건수 (페이징 없이 count만). */
    int countByCondition(ChargebackSearchParam param);

    /**
     * 동일 contract + settleMonth 환수 레코드 존재 여부.
     * 업로드 중복 방지용. 반환값 > 0 이면 이미 존재.
     */
    int existsByContractAndMonth(@Param("contractId") Long contractId,
                                 @Param("settleMonth") String settleMonth);
}
