package incheon.ags.dss.decline.mapper;

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

import incheon.ags.dss.decline.vo.AnaPredictScaVO;
import org.egovframe.rte.psl.dataaccess.mapper.Mapper;
import incheon.ags.dss.decline.vo.AnaZoneDgnsDtlVO;

@Mapper
@incheon.com.config.annotation.MainDB
public interface AnaZoneDgnsDtlMapper {

    // 1. 진단 이력 등록 (INSERT)
    void insertAnaZoneDgnsDtl(AnaZoneDgnsDtlVO vo) throws Exception;

    // 3. 진단 결과 조회 (O/X 판정)
    List<Map<String, Object>> selectDiagnosisResult(Map<String, Object> params) throws Exception;

    // 4. 이력 목록 조회 (관리/조회용)
    List<AnaZoneDgnsDtlVO> selectAnaZoneDgnsDtlList(AnaZoneDgnsDtlVO vo) throws Exception;
    int selectAnaZoneDgnsDtlListCnt(AnaZoneDgnsDtlVO vo) throws Exception;
    AnaZoneDgnsDtlVO selectAnaZoneDgnsDtlDetail(AnaZoneDgnsDtlVO vo) throws Exception;
    
    // 5. 삭제
    void deleteAnaZoneDgnsDtl(AnaZoneDgnsDtlVO vo) throws Exception;
    
    // 6. 대시보드용
    List<AnaZoneDgnsDtlVO> selectAnaZoneDgnsDtlRecentList(AnaZoneDgnsDtlVO vo) throws Exception;

	List<String> selectCriterionYears() throws Exception;

    // [JAVA 변환] 1. 진단 구역과 겹치는 집계구 목록 조회
    List<String> selectIntersectingScpCodes(int zoneNo) throws Exception;

    // [JAVA 변환] 2. 과거 통계 데이터 조회 (인구, 사업체, 노후도)
    List<Map<String, Object>> selectHistoricalStatsForPredict(Map<String, Object> params) throws Exception;

    // [JAVA 변환] 3. 기존 예측 결과 삭제
    void deleteAnaPredictSca(String dgnsNo) throws Exception;

    // [JAVA 변환] 4. 예측 결과 일괄 등록
    void insertAnaPredictScaBatch(List<AnaPredictScaVO> list) throws Exception;

    // 예측 결과 데이터 건수 조회 (Polling용)
    int selectPredictScaCount(String dgnsNo) throws Exception;

    // [신규] 동일한 조건의 진단 이력이 있는지 조회
    String selectExistingDiagnosisNo(AnaZoneDgnsDtlVO vo) throws Exception;

	void updateDiagnosisStatus(AnaZoneDgnsDtlVO vo);
}