package incheon.ags.dss.regen.mapper;

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

import org.egovframe.rte.psl.dataaccess.mapper.Mapper;
import incheon.ags.dss.regen.vo.UrbFcltyAnlsMstVO;
import incheon.ags.dss.regen.vo.UrbFcltyAnlsDtlVO;

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

    // 1. 분석 마스터 등록 (요청 저장)
    void insertUrbFcltyAnlsMst(UrbFcltyAnlsMstVO vo) throws Exception;

    // 3. 분석 이력 목록 조회
    List<UrbFcltyAnlsMstVO> selectUrbFcltyAnlsMstList(UrbFcltyAnlsMstVO vo) throws Exception;
    int selectUrbFcltyAnlsMstListCnt(UrbFcltyAnlsMstVO vo) throws Exception;

    // 4. 분석 결과 상세 조회 (지도 표시용)
    List<UrbFcltyAnlsDtlVO> selectUrbFcltyAnlsDtlList(UrbFcltyAnlsDtlVO vo) throws Exception;
    
    // 5. 분석 이력 삭제
    void deleteUrbFcltyAnlsMst(Integer fcltAnlsNo) throws Exception;

    // 6. 분석 상세 내역 삭제
    void deleteUrbFcltyAnlsDtl(Integer fcltAnlsNo) throws Exception;

	int selectUrbFcltyAnlsDtlListCnt(UrbFcltyAnlsDtlVO searchVO) throws Exception;

	void deleteUrbFcltyAnlsDtlItem(Integer rsltNo) throws Exception;

    /**
     * 접근도 분석 마스터 목록을 조회한다.
     * @param searchVO - 조회할 정보가 담긴 UrbFcltyAnlsMstVO
     * @return 접근도 분석 마스터 목록
     */
    List<UrbFcltyAnlsMstVO> selectAceiAnlsMstList(UrbFcltyAnlsMstVO searchVO);

    /**
     * 접근도 분석 마스터 단건 조회 (1:1)
     */
    UrbFcltyAnlsMstVO selectAceiAnlsMstOne(UrbFcltyAnlsMstVO searchVO);

    /**
     * 접근도 분석 마스터(1:1) 갱신 (zoneNo/radu)
     */
    void updateAceiAnlsMst(UrbFcltyAnlsMstVO vo) throws Exception;

    // [신규 추가: Java 분석용]

    /** 마스터 단건 상세 조회 (파라미터 로딩용) */
    UrbFcltyAnlsMstVO selectUrbFcltyAnlsMstDetail(int fcltAnlsNo);

    /** 마스터 타겟 분류 번호 업데이트 */
    void updateUrbFcltyAnlsMstTarget(UrbFcltyAnlsMstVO vo);

    /** 시설물 시작점 노드(Start Nodes) 조회 (pnu, cost) */
    List<Map<String, Object>> selectFacilityStartNodes(UrbFcltyAnlsMstVO vo);

    /** 목적지 필지 매핑 정보 조회 (parcel_pnu, road_pnu, offset_dist) */
    List<Map<String, Object>> selectDestinationParcels(UrbFcltyAnlsMstVO vo);

    /** 분석 결과 일괄 등록 (MyBatis Batch) */
    void insertUrbFcltyAnlsDtlBatch(List<UrbFcltyAnlsDtlVO> list);
    int countFacilitiesInSearchArea(UrbFcltyAnlsMstVO vo) throws Exception;
    Integer selectValidLatestAnalysis(UrbFcltyAnlsMstVO vo) throws Exception;
    List<UrbFcltyAnlsDtlVO> selectFacilitiesInSearchArea(UrbFcltyAnlsMstVO vo) throws Exception;

	void updateAnalysisFinishFlag(Map<String, Object> param);

    void createTempRoadNetwork(UrbFcltyAnlsMstVO vo);
    void createTempRoadIndex();
    List<Map<String, Object>> selectRoadEdgesFromTemp();
}
