package incheon.ags.dss.under.service;

import java.util.List;

import incheon.ags.dss.under.vo.UrbUdgdSnkgHistVO;
import incheon.ags.dss.under.web.dto.UrbUdgdSnkgOpenApiDetailResDTO;
import incheon.ags.dss.under.web.dto.UrbUdgdSnkgOpenApiListResDTO;
import incheon.ags.dss.under.web.dto.UrbUdgdSnkgOpenApiReqDTO;

public interface UrbUdgdSnkgHistService {

    /** 지반침하정보 상세 조회 */
    UrbUdgdSnkgHistVO selectUrbUdgdSnkgHistDetail(UrbUdgdSnkgHistVO vo) throws Exception;

    /** 지반침하정보 목록 조회 */
    List<UrbUdgdSnkgHistVO> selectUrbUdgdSnkgHistList(UrbUdgdSnkgHistVO vo) throws Exception;

    /** 지반침하정보 목록 총 개수 */
    int selectUrbUdgdSnkgHistListCnt(UrbUdgdSnkgHistVO vo) throws Exception;
    
    /** 지반침하정보 등록 */
    int insertUrbUdgdSnkgHist(UrbUdgdSnkgHistVO vo) throws Exception;
    
//    /** 지반침하정보 수정 */
//    int updateUrbUdgdSnkgHist(UrbUdgdSnkgHistVO vo) throws Exception;
//
//    /** 지반침하정보 삭제 */
//    int deleteUrbUdgdSnkgHist(UrbUdgdSnkgHistVO vo) throws Exception;
    
    // [ADD] 인천광역시 데이터 전수 조회 메서드
    List<UrbUdgdSnkgOpenApiListResDTO> fetchAllIncheonSubsidenceList(UrbUdgdSnkgOpenApiReqDTO reqDto) throws Exception;
    
    /**
     * Open API 목록 조회 (결과값: DTO 리스트)
     * 공공데이터 포털은 전체 카운트, 결과코드 등을 포함하므로 
     * Map으로 전체를 감싸거나, List만 반환하거나 선택해야 합니다.
     * 여기서는 결과 데이터(List)만 추출해서 준다고 가정합니다.
     */
    List<UrbUdgdSnkgOpenApiListResDTO> getOpenApiSubsidenceList(UrbUdgdSnkgOpenApiReqDTO reqDto) throws Exception;
    
    /**
     * Open API 상세 조회 (결과값: 단건 DTO)
     */
    UrbUdgdSnkgOpenApiDetailResDTO getOpenApiSubsidenceDetail(String sagoNo) throws Exception;

	List<UrbUdgdSnkgOpenApiListResDTO> fetchAllIncheonSubsidenceDtlList(UrbUdgdSnkgOpenApiReqDTO reqDto)
			throws Exception;
	
	/** [BATCH] 인천 지반침하 공공데이터 -> 로컬 DB 동기화 */
    void syncIncheonSubsidenceData() throws Exception;
    
    /** [NEW] DB에 적재된 인천 지반침하 데이터를 DTO 규격으로 조회 */
    List<UrbUdgdSnkgOpenApiListResDTO> selectIncheonSubsidenceDbList(UrbUdgdSnkgOpenApiReqDTO reqDto) throws Exception;
    
}