package com.ga.core.mapper.commission;

import com.ga.core.vo.commission.CommissionMasterResp;
import com.ga.core.vo.commission.CommissionMasterSearchParam;
import com.ga.core.vo.commission.CommissionMasterVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * commission_master Mapper — 전 수수료 종류 통합 허브 테이블.
 */
@Mapper
public interface CommissionMasterMapper {

    CommissionMasterResp selectById(@Param("masterId") Long masterId);

    List<CommissionMasterResp> selectList(CommissionMasterSearchParam param);

    /**
     * 특정 설계사의 특정 정산월 전체 수수료 목록 조회.
     * 배치 완료 후 명세서 생성 시 호출.
     */
    List<CommissionMasterResp> selectByAgentAndMonth(@Param("agentId") Long agentId,
                                                     @Param("settleMonth") String settleMonth);

    /**
     * 정산월 전체 수수료 집계 — 수수료 종류별 합계.
     * 배치 집계 또는 대시보드 요약 용도.
     */
    List<CommissionMasterResp> selectAggregatedByMonth(@Param("settleMonth") String settleMonth);

    int insert(CommissionMasterVO vo);

    /**
     * 원본 원장 기준 UPSERT — 배치에서 원장 처리 후 commission_master 반영 시 호출.
     * (source_table + source_id + commission_type + agent_id UNIQUE 제약 기반)
     */
    int upsertFromLedger(CommissionMasterVO vo);

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

    int delete(@Param("masterId") Long masterId);
}
