package kcg.imis.notice.mapper;

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

import kcg.imis.notice.vo.NoticeSearchVO;
import kcg.imis.notice.vo.NoticeVO;

import org.springframework.stereotype.Repository;

import egovframework.rte.psl.dataaccess.EgovAbstractMapper;

/**
  * @FileName : NoticeMapper.java
  * @Project : 국제해양프로젝트
  * @Date : 2018. 4. 26. 
  * @작성자 : Moon
  * @변경이력 : 
  * @프로그램 설명 :
 */
@Repository("noticeMapper")
public class NoticeMapper extends EgovAbstractMapper {
	
	
	/**
	 * 공지 목록 화면을 반환한다.
	 * 
	 * @param searchVO 검색, 페이지 정보 객체
	 * @return 게시물 리스트
	 * @throws Exception 기본 예외 처리
	 */
	public List<NoticeVO> selectNoticeList(final NoticeSearchVO searchVO) throws Exception {
		return selectList("Notice.selectNoticeList", searchVO);
	}
	
	
	/**
	 * 검색 키워드에 따른 총 게시물 개수를 조회한다.
	 * 
	 * @param searchVO 검색, 페이지 정보 객체
	 * @return 게시물 개수
	 * @exception Exception 기본 예외 처리
	 */
    public int selectNoticeListTotCnt(final NoticeSearchVO searchVO) throws Exception {
    	return (Integer) selectOne("Notice.selectNoticeListTotCnt", searchVO);
    }
	
	/**
	 * 전체 게시물 개수를 가져온다.
	 * @param searchVO 
	 * 
	 * @return 게시물 개수
	 * @throws Exception 기본 예외 처리
	 */
    public int selectNoticeTotalCnt(final NoticeSearchVO searchVO) throws Exception {
        return (Integer) selectOne("Notice.selectNoticeTotalCnt", searchVO);
    }
    
	/**
	 * 답글 추가에 따른 group seq를 수정한다
	 * 
	 * @param noticeVO NoticeVO 객체
	 * @return 성공 - 1, 실패 - 0
	 * @throws Exception 기본 예외 처리
	 */
	public int updateGrpStep(final NoticeVO noticeVO) throws Exception {
		return update("Notice.updateGrpStep", noticeVO);
	}
	
	/**
	 * 이전게시물 번호
	 * 
	 * @param noticeVO NoticeVO 객체
	 * @return 그룹에 해당되는 게시물 개수
	 * @throws Exception 기본 예외 처리
	 */
	public int selectPrevSeq(final NoticeVO noticeVO) throws Exception {
		return selectOne("Notice.selectPrevSeq", noticeVO);
	}
	
	/**
	 * 다음게시물 번호
	 * 
	 * @param noticeVO NoticeVO 객체
	 * @return 그룹에 해당되는 게시물 개수
	 * @throws Exception 기본 예외 처리
	 */
	public int selectNextSeq(final NoticeVO noticeVO) throws Exception {
		return selectOne("Notice.selectNextSeq", noticeVO);
	}

	
    /**
	 * 게시물을 추가한다.
	 * 
	 * @param noticeVO 공지 내용 구성 객체
	 * @return 글 총 갯수
	 * @throws Exception 기본 예외 처리
	 */
	public HashMap<String, Object> insertNotice(final NoticeVO noticeVO) throws Exception {
		
		HashMap<String, Object> map = new HashMap<String, Object>();
		
		try {
			insert("Notice.insertNotice", noticeVO);
			map.put("npIdx", noticeVO.getNpIdx());
		} catch (Exception e) {
			e.printStackTrace();
		}
		return map;
	};

	/**
	 * 선택한 게시물의 내용을 반환한다.
	 * 
	 * @param noticeVO 게시물 VO
	 * @return 선택한 게시물 내용 반환
	 * @throws Exception 기본 예외 처리
	 */
	public NoticeVO selectNotice(final NoticeVO noticeVO) throws Exception {
		return selectOne("Notice.selectNotice", noticeVO);
	}

	/**
	 * 게시물을 DB에 업데이트 한다.
	 * 
	 * @param noticeVO 게시물 VO
	 * @return 성공 - 1, 실패 - 0
	 * @throws Exception 기본 예외 처리
	 */
	public int updateNotice(final NoticeVO noticeVO) throws Exception {
		return update("Notice.updateNotice", noticeVO);
	}

	/**
	 * 게시물을 삭제한다.
	 * 
	 * @param noticeVO 게시물 VO
	 * @return HashMap/ seq : 게시물 번호 , result : 성공 - 1, 실패 - 0
	 * @throws Exception 기본 예외 처리
	 */
	public int deleteNotice(final NoticeVO noticeVO) throws Exception {
		return delete("Notice.deleteNotice", noticeVO);
	}
	

	/**
	 * 공지 팝업 목록 화면을 반환한다.
	 * 
	 * @param searchVO 검색, 페이지 정보 객체
	 * @return 게시물 리스트
	 * @throws Exception 기본 예외 처리
	 */
	public List<NoticeVO> selectNoticePopupList() throws Exception {
		return selectList("Notice.selectNoticePopupList");
	}
	
}
