package incheon.ags.pss.project.service;

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

import incheon.ags.pss.project.vo.ProjectSearchVO;
import incheon.ags.pss.project.vo.ProjectVO;
import incheon.ags.pss.project.vo.UserSearchVO;

/**
 * 안건지도 서비스 인터페이스
 * @author hj
 */
public interface ProjectService {
    /**
     * 최근 안건지도 목록 조회
     * @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;
    Long insertOrUpdate(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;

	ProjectVO selectProjectByShrnUrl(String shrnUrl) throws Exception;

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

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

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