package com.ga.core.mapper.commission;

import com.ga.core.vo.commission.PersistencyBonusResp;
import com.ga.core.vo.commission.PersistencyBonusSearchParam;
import com.ga.core.vo.commission.PersistencyBonusVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * persistency_bonus Mapper.
 * UNIQUE(agent_id, base_month, retention_month) 이므로 upsert 메서드 제공.
 */
@Mapper
public interface PersistencyBonusMapper {

    PersistencyBonusResp selectById(@Param("bonusId") Long bonusId);

    List<PersistencyBonusResp> selectList(PersistencyBonusSearchParam param);

    /**
     * UPSERT — 동일 (agent_id, base_month, retention_month) 존재 시 금액/상태 갱신.
     * 배치 유지율 평가 후 호출.
     */
    int upsert(PersistencyBonusVO vo);

    int insert(PersistencyBonusVO vo);

    int updateStatus(@Param("bonusId") Long bonusId, @Param("status") String status);

    int delete(@Param("bonusId") Long bonusId);

    /** 정산월 기준 설계사별 유지보너스 합계 — settle_master 집계 배치 용도 */
    List<Map<String, Object>> aggregateByAgent(@Param("settleMonth") String settleMonth);
}
