package com.ga.core.mapper.kpi;

import com.ga.core.vo.kpi.ForecastKpiMonthlyResp;
import com.ga.core.vo.kpi.ForecastKpiMonthlySearchParam;
import com.ga.core.vo.kpi.ForecastKpiMonthlyVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface ForecastKpiMonthlyMapper {

    /** 예측 목록 */
    List<ForecastKpiMonthlyResp> selectList(ForecastKpiMonthlySearchParam param);

    /**
     * UPSERT — 동일 (forecast_month, target_org_id, metric_code) 조합은 갱신.
     * target_org_id NULL 도 부분 UNIQUE 인덱스로 처리.
     */
    int upsertBatch(@Param("list") List<ForecastKpiMonthlyVO> list);

    /**
     * 차월 예측 산출 — mv_monthly_summary / mv_retention_rate 기반.
     * 입력 forecastMonth(YYYY-MM) 직전 sampleSize 개월 평균/표준편차.
     */
    List<ForecastKpiMonthlyVO> computeForecast(@Param("forecastMonth") String forecastMonth,
                                                @Param("method") String method,
                                                @Param("sampleSize") int sampleSize);
}
