package kcg.faics.report.service;

import java.util.HashMap;
import java.util.List;

import kcg.faics.cmmn.bbs.BaseBbsService;
import kcg.faics.report.vo.ReportGoalVO;
import kcg.faics.report.vo.ReportSearchVO;
import kcg.faics.report.vo.ReportVO;

/**
 * 견문 인터페이스
 * 
 * @author 하영지
 *
 */
public interface ReportService extends BaseBbsService<ReportSearchVO, ReportVO> {
	
	/**
	 * 견문의 새 소속번호를 반환한다.
	 * 
	 * @param reportVO 견문정보
	 * @return 소속번호
	 * @throws Exception 기본예외처리
	 */
	int selectPlaceNum(ReportVO reportVO);
	
	/**
	 * 견문의 임시저장목록을 반환한다.
	 * 
	 * @param reportSearchVO 견문 검색조건 vo
	 * @return 견문 임시저장목록
	 */
	List<ReportVO> selectSaveList(ReportSearchVO reportSearchVO);
	
	/**
	 * 견문 임시저장목록 결과 갯수를 반환한다.
	 * 
	 * @param reportSearchVO 견문 검색조건 vo
	 * @return 견문 임시저장목록 개숫
	 */
	int selectSaveListCnt(ReportSearchVO reportSearchVO);
	
	/**
	 * 선택된 견문을 삭제한다.
	 * 
	 * @param selectedSeq 선택된 견문 시퀀스 리스트
	 * @return 성공-1,실패-0
	 * @throws Exception 기본 예외 처리
	 */
	int deleteSelected(String[] selectedSeq) throws Exception;
	
	/**
	 * @return 자동 삭제될 견문들의 시퀀스를 ,로 연결한 문자열로 반환한다.
	 */
	String selectAutoRemoveList();
	
	/**
	 * 견문제출현황 목록을 반환한다.
	 * 
	 * @param reportSearchVO 견문 검색 조건 객체
	 * @return 견문제출현황 목록
	 * @throws Exception 기본예외처리
	 */
	List<ReportVO> selectPresentList(ReportSearchVO reportSearchVO) throws Exception;
	/**
	 * 견문제출현황 목록 갯수를 반환한다.
	 * 
	 * @param reportSearchVO 견문 검색 조건 객체
	 * @return 견문제출현황 목록갯수
	 * @throws Exception 기본예외처리
	 */
	int selectPresentListCnt(ReportSearchVO reportSearchVO) throws Exception;
	/**
	 * 견문제출현황 전체목록을 반환한다.
	 * 
	 * @param reportSearchVO 견문 검색 조건 객체
	 * @return 견문제출현황 전체목록
	 * @throws Exception 기본예외처리
	 */
	List<ReportVO> selectPresentListAll(ReportSearchVO reportSearchVO) throws Exception;

	/**
	 * 평가기록부를 반환한다.
	 * 
	 * @param reportSearchVO 견문 검색 조건 객체
	 * @return 평가기록부 목록
	 * @throws Exception 기본예외처리
	 */
	List<ReportVO> selectRecordList(ReportSearchVO reportSearchVO) throws Exception;
	/**
	 * 평가기록부 목록 갯수를 반환한다.
	 * 
	 * @param reportSearchVO 견문 검색 조건 객체
	 * @return 평가기록부 목록갯수
	 * @throws Exception 기본예외처리
	 */
	int selectRecordListCnt(ReportSearchVO reportSearchVO) throws Exception;
	/**
	 * 평가기록부 전체목록을 반환한다.
	 * 
	 * @param reportSearchVO 견문 검색 조건 객체
	 * @return 평가기록부 전체목록
	 * @throws Exception 기본예외처리
	 */
	List<ReportVO> selectRecordListAll(ReportSearchVO reportSearchVO) throws Exception;
	
	/**
	 * 목표 관리 목록을 반환한다.
	 * 
	 * @param reportSearchVO 견문 검색 객체
	 * @return 목표 관리 
	 * @throws Exception 기본예외처리
	 */
	List<ReportGoalVO> selectGoalList(ReportSearchVO reportSearchVO) throws Exception;
	
	/**
	 * 목표를 입력하고 수정한다.
	 * 
	 * @param reportGoalVO 입력 및 수정 작업을 할 목표 객체 목록
	 * @return 성공:1, 실패:0
	 * @throws Exception 기본예외처리
	 */
	int updateGoal(ReportGoalVO reportGoalVO) throws Exception;
	
	/**
	 * 사용자별 목표 통계를 반환한다.
	 * 
	 * @param reportSearchVO 견문 검색객체
	 * @return 목표 통계
	 * @throws Exception 기본예외처리
	 */
	List<HashMap<String, Object>> getGoalStats(final ReportSearchVO reportSearchVO) throws Exception;
	
	/**
	 * 소속별 목표 통계를 반환한다.
	 * 
	 * @param reportSearchVO 견문 검색객체
	 * @return 목표 통계
	 * @throws Exception 기본예외처리
	 */
	List<HashMap<String, Object>> getGoalStatsPlace(final ReportSearchVO reportSearchVO) throws Exception;
}
