package incheon.ags.pss.edit.service;

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

import org.springframework.web.multipart.MultipartFile;

import incheon.ags.pss.edit.vo.BoundaryDetailVO;
import incheon.ags.pss.edit.vo.BoundaryVO;

public interface LayerManageService {

    /**
     * 경계 목록을 조회합니다.
     * @param bizNo 안건지도 번호
     * @return 경계 목록
     * @throws Exception
     */
    List<BoundaryVO> selectBoundaryList(Long bizNo) throws Exception;
    
    /**
     * 경계 상세 정보를 조회합니다.
     * @param bndryNo 경계 번호
     * @return 경계 정보
     * @throws Exception
     */
    BoundaryVO selectBoundary(Long bndryNo) throws Exception;

    /**
     * 경계를 등록합니다.
     * @param vo LayerManageVO
     * @throws Exception
     */
    void insertBoundary(BoundaryVO vo) throws Exception;

    /**
     * 경계를 수정합니다.
     * @param vo LayerManageVO
     * @throws Exception
     */
    void updateBoundary(BoundaryVO vo) throws Exception;

    /**
     * 경계를 삭제합니다.
     * @param bndryNo 경계 번호
     * @throws Exception
     */
    void deleteBoundary(Long bndryNo) throws Exception;
    
    /**
     * 특정 경계에 속한 상세 구역 목록을 조회합니다.
     * @param bndryNo 경계 번호
     * @return 경계 상세 목록
     * @throws Exception
     */
    List<BoundaryDetailVO> selectBoundaryDetailList(Long bndryNo) throws Exception;

    /**
     * 경계 상세 구역을 등록합니다.
     * @param vo BoundaryDetailVO
     * @throws Exception
     */
    void insertBoundaryDetail(BoundaryDetailVO vo) throws Exception;

//    /**
//     * 경계 상세 구역을 수정합니다. (필요 시)
//     * @param vo BoundaryDetailVO
//     * @throws Exception
//     */
//    void updateBoundaryDetail(BoundaryDetailVO vo) throws Exception;
    
    /**
     * 경계 상세 구역을 삭제합니다.
     * @param dgmNo 도형 번호
     * @throws Exception
     */
    void deleteBoundaryDetail(Long dgmNo) throws Exception;

	List<Map<String, Object>> selectGuList() throws Exception;

	List<Map<String, Object>> selectDongList(String sigCd) throws Exception;

//	void insertBoundaryDetailByEmd(Long bndryNo, String emdCd) throws Exception;

	BoundaryDetailVO selectEmdDataForDetail(String emdCd) throws Exception;
	
	BoundaryDetailVO findIntersectingArea(Map<String, Object> params) throws Exception;

    /**
     * Shapefile 미리보기
     * @param file Shapefile (zip)
     * @return FeatureCollection GeoJSON 맵
     * @throws Exception
     */
    Map<String, Object> previewShape(MultipartFile file) throws Exception;
}