package incheon.ags.dss.regen.service;

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

import incheon.ags.dss.regen.vo.UrbTrgtClsfMstVO;
import incheon.ags.dss.regen.vo.UrbTrgtClsfDtlVO;
import incheon.ags.dss.regen.vo.UrbFcltyAnlsMstVO; // UrbFcltyAnlsMstVO 임포트 추가

public interface UrbTrgtClsfService {

    /**
     * 대상분류 마스터 목록 조회
     */
    List<UrbTrgtClsfMstVO> selectUrbTrgtClsfMstList(UrbTrgtClsfMstVO vo) throws Exception;

    /**
     * 대상분류 마스터 목록 건수
     */
    int selectUrbTrgtClsfMstListCnt(UrbTrgtClsfMstVO vo) throws Exception;

    /**
     * 대상분류 마스터 등록
     */
    void insertUrbTrgtClsfMst(UrbTrgtClsfMstVO vo) throws Exception;

    /**
     * 대상분류 마스터 수정
     */
    void updateUrbTrgtClsfMst(UrbTrgtClsfMstVO vo) throws Exception;

    /**
     * 대상분류 마스터 삭제
     */
    void deleteUrbTrgtClsfMst(UrbTrgtClsfMstVO vo) throws Exception;

    /**
     * 좌표 기준 필지/시설 정보 조회
     */
    UrbTrgtClsfDtlVO selectUrbTrgtParcelByPoint(Map<String, Object> param) throws Exception;

    /**
     * 대상분류 상세 등록
     */
    void insertUrbTrgtClsfDtl(UrbTrgtClsfDtlVO vo) throws Exception;

    /**
     * 대상분류 상세 목록 조회 (페이징)
     */
    List<UrbTrgtClsfDtlVO> selectUrbTrgtClsfDtlList(UrbTrgtClsfDtlVO vo) throws Exception;

    /**
     * 대상분류 상세 목록 건수
     */
    int selectUrbTrgtClsfDtlListCnt(UrbTrgtClsfDtlVO vo) throws Exception;

    /**
     * 대상분류 상세 단건 삭제 (상세번호 기준)
     */
    void deleteUrbTrgtClsfDtlItem(Integer trgtClsfDtlNo) throws Exception;

    /**
     * 대상분류 번호 기준 상세 전체 삭제
     */
    void deleteUrbTrgtClsfDtlByClsfNo(UrbTrgtClsfDtlVO vo) throws Exception;

    /**
     * 접근성 분석 실행
     * @param vo UrbTrgtClsfDtlVO
     * @return 생성된 분석 마스터 번호 (fcltAnlsNo)
     * @throws Exception
     */
    int runAccessibilityAnalysis(UrbTrgtClsfDtlVO vo) throws Exception;

    int createTargetClassificationInJava(UrbTrgtClsfMstVO vo) throws Exception;
}
