package com.ga.core.mapper.kpi;

import com.ga.core.vo.kpi.KpiCumulativeResp;
import com.ga.core.vo.kpi.KpiMonthlySummaryResp;
import com.ga.core.vo.kpi.KpiOrgSummaryResp;
import com.ga.core.vo.kpi.KpiRetentionResp;
import com.ga.core.vo.kpi.KpiSearchParam;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**
 * KPI 대시보드 Mapper — V37 Materialized View 4종 단일 인터페이스.
 * 모든 MV는 읽기 전용 (INSERT/UPDATE 없음).
 * REFRESH는 ga-batch가 야간 배치로 REFRESH MATERIALIZED VIEW CONCURRENTLY 호출.
 */
@Mapper
public interface KpiMapper {

    /**
     * 월별 정산 요약 (mv_monthly_summary).
     * 정산년월 범위 필터. yyyymmFrom/yyyymmTo 미지정 시 전체.
     */
    List<KpiMonthlySummaryResp> selectMonthlySummary(KpiSearchParam param);

    /**
     * 조직별 월별 요약 (mv_org_summary).
     * orgId 필터 가능, 정산년월 범위 필터 가능.
     */
    List<KpiOrgSummaryResp> selectOrgSummary(KpiSearchParam param);

    /**
     * 계약 유지율 (mv_retention).
     * carrierId 필터 가능, contractMonth 범위 필터 가능.
     */
    List<KpiRetentionResp> selectRetention(KpiSearchParam param);

    /**
     * 설계사/조직 누계 (mv_cumulative).
     * levelType(AGENT/ORG), orgId, agentId 필터 가능.
     */
    List<KpiCumulativeResp> selectCumulative(KpiSearchParam param);
}
