package com.ga.core.mapper.kpi;

import com.ga.core.vo.kpi.RetentionAnomalyAlertResp;
import com.ga.core.vo.kpi.RetentionAnomalyAlertSearchParam;
import com.ga.core.vo.kpi.RetentionAnomalyAlertVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface RetentionAnomalyAlertMapper {

    /** 이상치 목록 */
    List<RetentionAnomalyAlertResp> selectList(RetentionAnomalyAlertSearchParam param);

    /** 단건 상세 */
    RetentionAnomalyAlertResp selectDetailById(@Param("alertId") Long alertId);

    /** 일괄 INSERT — 탐지 배치 결과 저장 */
    int insertBatch(@Param("list") List<RetentionAnomalyAlertVO> list);

    /**
     * 검토/완료 처리.
     * status: REVIEWED 또는 RESOLVED.
     */
    int updateStatus(@Param("ids") List<Long> ids,
                     @Param("status") String status,
                     @Param("note") String note,
                     @Param("reviewedBy") Long reviewedBy);

    /**
     * 이상치 탐지 — 입력 월 기준 mv_retention_rate 직전 3개월 평균 대비 1.5%P 이상 편차.
     * 결과는 호출측에서 insertBatch로 저장 (INSERT 직접 안 함, UNIQUE 충돌 방지).
     */
    List<RetentionAnomalyAlertVO> detectAnomalies(@Param("alertMonth") String alertMonth);
}
