package kcg.faics.board.service.impl;

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

import kcg.faics.board.vo.BoardSearchVO;
import kcg.faics.board.vo.BoardVO;

import org.springframework.stereotype.Repository;

import egovframework.rte.psl.dataaccess.EgovAbstractMapper;


/** 
 * BoardMapper.java 
 * @author 임새미 
 * @since 2016. 9. 29.
 *
 *  	 수정일                     수정자                                       수정내용
 *  -------------	--------	---------------------------
 *  2016. 9. 29. 	    임새미				       최초생성
 * 
 */
@Repository("boardMapper")
public class BoardMapper extends EgovAbstractMapper {
	
	
	/**
	 * 게시판 목록 화면을 반환한다.
	 * 
	 * @param searchVO 검색, 페이지 정보 객체
	 * @return 게시물 리스트
	 * @throws Exception 기본 예외 처리
	 */
	public List<BoardVO> selectBoardList(final BoardSearchVO searchVO) throws Exception {
		return selectList("Board.selectBoardList", searchVO);
	}
	
	
	/**
	 * 검색 키워드에 따른 총 게시물 개수를 조회한다.
	 * 
	 * @param searchVO 검색, 페이지 정보 객체
	 * @return 게시물 개수
	 * @exception Exception 기본 예외 처리
	 */
    public int selectBoardListTotCnt(final BoardSearchVO searchVO) throws Exception {
    	return (Integer) selectOne("Board.selectBoardListTotCnt", searchVO);
    }
	
	/**
	 * 전체 게시물 개수를 가져온다.
	 * @param searchVO 
	 * 
	 * @return 게시물 개수
	 * @throws Exception 기본 예외 처리
	 */
    public int selectBoardTotalCnt(final BoardSearchVO searchVO) throws Exception {
        return (Integer) selectOne("Board.selectBoardTotalCnt", searchVO);
    }
    
	/**
	 * 답글 추가에 따른 group seq를 수정한다
	 * 
	 * @param boardVO BoardVO 객체
	 * @return 성공 - 1, 실패 - 0
	 * @throws Exception 기본 예외 처리
	 */
	public int updateGrpStep(final BoardVO boardVO) throws Exception {
		return update("Board.updateGrpStep", boardVO);
	}
	
	/**
	 * group seq에 해당되는 게시물 개수를 반환한다
	 * 
	 * @param boardVO BoardVO 객체
	 * @return 그룹에 해당되는 게시물 개수
	 * @throws Exception 기본 예외 처리
	 */
	public BoardVO selectPrevBoard(final BoardVO boardVO) throws Exception {
		return selectOne("Board.selectPrevBoard", boardVO);
	}
	
	/**
	 * prevSeq, nextSeq를 업데이트한다.
	 * 
	 * @param boardVO BoardVO 객체
	 * @return 성공 - 1, 실패 - 0
	 * @throws Exception 기본 예외 처리
	 */
	public int updatePrevNextSeq(final BoardVO boardVO) throws Exception {
		return update("Board.updatePrevNextSeq", boardVO);
	}
	
    /**
	 * 게시물을 추가한다.
	 * 
	 * @param boardVO 게시판 내용 구성 객체
	 * @return 글 총 갯수
	 * @throws Exception 기본 예외 처리
	 */
	public HashMap<String, Object> insertBoard(final BoardVO boardVO) throws Exception {
		
		HashMap<String, Object> map = new HashMap<String, Object>();
		
		int result = 0;
		try {
			result = insert("Board.insertBoard", boardVO);
			
			map.put("result", result);
			map.put("seq", boardVO.getSeq());
		} catch (Exception e) {
			e.printStackTrace();
		}
		return map;
	};

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

	/**
	 * 새 게시물의 group 시퀀스를 업데이트한다.
	 * 
	 * @param boardVO 게시물 VO
	 * @return 성공 - 1, 실패 - 0
	 * @throws Exception 기본 예외 처리
	 */
	public int updateGrpSeq(final BoardVO boardVO) throws Exception {
		return update("Board.updateGrpSeq", boardVO);
	}
	
	/**
	 * 게시물을 DB에 업데이트 한다.
	 * 
	 * @param boardVO 게시물 VO
	 * @return 성공 - 1, 실패 - 0
	 * @throws Exception 기본 예외 처리
	 */
	public int updateBoard(final BoardVO boardVO) throws Exception {
		return update("Board.updateBoard", boardVO);
	}

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


}
