package com.ga.core.mapper.settle;

import com.ga.core.vo.settle.IncentivePaymentResp;
import com.ga.core.vo.settle.IncentivePaymentSearchParam;
import com.ga.core.vo.settle.IncentivePaymentVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

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

/**
 * 시책 지급 이력 Mapper
 * incentive_payment 테이블 CRUD + 상태 관리.
 */
@Mapper
public interface IncentivePaymentMapper {

    /** 시책 지급 목록 조회 (페이징) */
    List<IncentivePaymentResp> selectList(IncentivePaymentSearchParam param);

    /** 시책 지급 단건 조회 (응답 조인 포함) */
    IncentivePaymentResp selectById(@Param("incentivePayId") Long incentivePayId);

    /** 시책 지급 단건 조회 (VO, 상태 관리용) */
    IncentivePaymentVO selectVoById(@Param("incentivePayId") Long incentivePayId);

    /** 설계사의 특정 정산월 시책 지급 합계 (배치 집계용) */
    BigDecimal sumByAgentMonth(@Param("agentId") Long agentId,
                               @Param("settleMonth") String settleMonth);

    /** 시책 지급 등록 (ON CONFLICT: program_id + agent_id + settle_month) */
    int insert(IncentivePaymentVO vo);

    /** 상태 변경 (CONFIRMED/PAID/CANCELLED) */
    int updateStatus(@Param("incentivePayId") Long incentivePayId,
                     @Param("status") String status,
                     @Param("userId") Long userId);

    /** 정산 반영 (settle_id 연결) */
    int linkSettle(@Param("incentivePayId") Long incentivePayId,
                   @Param("settleId") Long settleId);
}
