package incheon.ags.pss.project.mapper;

import incheon.ags.pss.edit.vo.BoundaryVO;
import incheon.ags.pss.project.vo.ProjectSearchVO;
import incheon.ags.pss.project.vo.ProjectVO;
import incheon.ags.pss.project.vo.ShrnMapVO;
import incheon.ags.pss.project.vo.UserSearchVO;

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

/**
 * 안건지도 매퍼 인터페이스
 * @author hj
 */
@org.egovframe.rte.psl.dataaccess.mapper.Mapper @incheon.com.config.annotation.MainDB public interface ProjectMapper {
    /**
     * 최근 안건지도 목록 조회
     * @param projectSearchVO 안건지도 검색 VO
     * @return 최근 안건지도 목록
     * @throws Exception 예외 발생 시
     */
    List<ProjectVO> selectRecentProjects(ProjectSearchVO projectSearchVO) throws Exception;

    /**
     * 내 안건지도 목록 조회
     * @param projectSearchVO 안건지도 검색 VO
     * @return 내 안건지도 목록
     * @throws Exception 예외 발생 시
     */
    List<ProjectVO> selectProjectList(ProjectSearchVO projectSearchVO) throws Exception;

    /**
     * 공유받은 안건지도 목록 조회
     * @param projectSearchVO 안건지도 검색 VO
     * @return 공유받은 안건지도 목록
     * @throws Exception 예외 발생 시
     */
    List<ProjectVO> selectSharedProjects(ProjectSearchVO projectSearchVO) throws Exception;

    /**
     * 내 안건지도 총 갯수 조회
     * @param projectSearchVO 안건지도 검색 VO
     * @return 총 갯수
     * @throws Exception 예외 발생 시
     */
    int selectProjectListCnt(ProjectSearchVO projectSearchVO) throws Exception;

    /**
     * 공유받은 안건지도 총 갯수 조회
     * @param projectSearchVO 안건지도 검색 VO
     * @return 총 갯수
     * @throws Exception 예외 발생 시
     */
    int selectSharedProjectsCnt(ProjectSearchVO projectSearchVO) throws Exception;
    
    void deleteProject(Long bizNo) throws Exception;
    void deleteFileUploadHistory(Long bizNo) throws Exception;
    void deleteImagesByBizNo(Long bizNo) throws Exception;
    void deleteModelsByBizNo(Long bizNo) throws Exception;
    void deleteViewpointsByBizNo(Long bizNo) throws Exception;
    void deleteSketchesByBizNo(Long bizNo) throws Exception;
    void deleteSimulationRecords(Long bizNo) throws Exception;
    void deleteSimulationsByBizNo(Long bizNo) throws Exception;
    void deleteBoundaryDetailsByBizNo(Long bizNo) throws Exception;
    void deleteBoundariesByBizNo(Long bizNo) throws Exception;

    void deleteSharedUsersPhysical(Long bizNo) throws Exception;
    
    Long insertProject(ProjectVO projectVO) throws Exception;
    void updateProject(ProjectVO projectVO) throws Exception;
    
    void updateProjectShrnUrl(ProjectVO vo) throws Exception;
    
    ProjectVO selectProject(Long bizNo) throws Exception;
    List<Map<String, String>> selectSharedUsers(Long bizNo) throws Exception;
    
    int countBoundaries(Long bizNo) throws Exception;
    int countImages(Long bizNo) throws Exception;
    int countModels(Long bizNo) throws Exception;
    int countViewpoints(Long bizNo) throws Exception;
    int countSketches(Long bizNo) throws Exception;
    int countSimulations(Long bizNo) throws Exception;
    void insertShrnMap(ShrnMapVO shrnVO) throws Exception;

	void updateProjectBoundaryInfo(BoundaryVO vo);

	void recalculateProjectAggregates(Long bizNo);

	ProjectVO selectProjectByShrnUrl(String shrnUrl) throws Exception;

	void updateProjectShrnUrl(Map<String, Object> dbParams);

	void deleteSharedUsersPhysical(ShrnMapVO shrnVO);

    // [추가] 안건지도 안건 연결
    void updateProjectAgenda(ProjectVO projectVO) throws Exception;

    // [추가] 사용자 검색
    int selectUserCnt(UserSearchVO vo) throws Exception;
    List<Map<String, Object>> selectUserList(UserSearchVO vo) throws Exception;
}