package kcg.faics.member.service.impl;

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

import kcg.faics.member.vo.MemberSearchVO;
import kcg.faics.member.vo.MemberVO;
import kcg.faics.sec.LoginUserVO;

import org.springframework.stereotype.Repository;

import egovframework.rte.psl.dataaccess.EgovAbstractMapper;

/** 
 * MmeberAuthMapper.java
 * @author 임새미 
 * @since 2016. 11. 7.
 *
 *  	 수정일                     수정자                                       수정내용
 *  -------------	--------	---------------------------
 *  2016. 11. 7. 	    임새미				       최초생성
 * 
 */
@Repository("memberAuthMapper")
public class MemberAuthMapper extends EgovAbstractMapper {
	
	/**
	 * 과장정보를 반환한다.
	 * 
	 * @param place1 소속기관 코드
	 * @return 과장정보
	 * @throws Exception 기본 예외 처리
	 */
	public MemberVO getHead(String place1) throws Exception {
		return selectOne("MemberAuth.getHead", place1);
	}
	
	/**
	 * 계장정보를 반환한다.
	 * 
	 * @param place1 소속기관 코드
	 * @return 계장정보
	 * @throws Exception 기본 예외 처리
	 */
	public MemberVO getSection(String place1) throws Exception {
		return selectOne("MemberAuth.getSection", place1);
	}

	/**
	 * 외사경찰 리스트를 반환한다.
	 * 
	 * @param searchVO searchVO 객체
	 * @return 외사경찰리스트
	 * @throws Exception 기본 예외 처리
	 */
	public List<LoginUserVO> getMemberListByPlace1(MemberSearchVO searchVO) {
		return selectList("MemberAuth.getMemberListByPlace1", searchVO);
	}
	
	/**
	 * 외사경찰 수를 반환한다.
	 * 
	 * @param searchVO searchVO 객체
	 * @return 전체 외사경찰 수
	 * @throws Exception 기본 예외 처리
	 */
	public int getMemberListByPlace1Cnt(MemberSearchVO searchVO) {
		return (Integer) selectOne("MemberAuth.getMemberListByPlace1Cnt", searchVO);
	}

	/**
	 * 외사경찰의 권한을 설정한다.
	 * 
	 * @param memberVO userid, usegrade 정보
	 * @return 결과 : 성공 - 1, 실패 - 0
	 * @throws Exception 기본 예외 처리
	 */
	public int updateMemberAuth(MemberVO memberVO) {
		return update("MemberAuth.updateMemberAuth", memberVO);
	}
	
	/**
	 * 사용자의 견문을 가져온다.
	 * 
	 * @param memberVO userid 정보
	 * @return 결과 : 성공 - 1, 실패 - 0
	 * @throws Exception 기본 예외 처리
	 */
	public HashMap<String, Object> getMemberRpt(MemberVO memberVO) {
		return selectOne("MemberAuth.getMemberRpt", memberVO);
	}
	
	/**
	 * 외사경찰의 견문권한을 설정한다.
	 * 
	 * @param memberVO userid, usegrade 정보
	 * @return 결과 : 성공 - 1, 실패 - 0
	 * @throws Exception 기본 예외 처리
	 */
	public int updateMemberRpt(MemberVO memberVO) {
		return update("MemberAuth.updateMemberRpt", memberVO);
	}
	
	/**
	 * 외사경찰의 견문권한을 추가한다.
	 * 
	 * @param memberVO userid, usegrade 정보
	 * @return 결과 : 성공 - 1, 실패 - 0
	 * @throws Exception 기본 예외 처리
	 */
	public int insertMemberRpt(MemberVO memberVO) {
		return insert("MemberAuth.insertMemberRpt", memberVO);
	}

	/**
	 * 외사경찰 부서 계장 권한을 설정한다.
	 * 
	 * @param memberVO userid 정보
	 * @return 결과 : 성공 - 1, 실패 - 0
	 * @throws Exception 기본 예외 처리
	 */
	public int updateSection(final MemberVO memberVO) {
		insertRptApprove(memberVO);
		return update("MemberAuth.updateSection", memberVO);
	}

	/**
	 * 외사경찰 부서 과장 권한을 설정한다.
	 * 
	 * @param memberVO userid 정보
	 * @return 결과 : 성공 - 1, 실패 - 0
	 * @throws Exception 기본 예외 처리
	 */
	public int updateHead(final MemberVO memberVO) {
		insertRptApprove(memberVO);
		return update("MemberAuth.updateHead", memberVO);
	}
	
	/**
	 * 견문권한 레코드가 있는지 판단한다.
	 * 
	 * @param memberVO 사용자VO
	 * @return 1:존재, 0:없음
	 */
	private int existRptApprove(final MemberVO memberVO) {
		return selectOne("MemberAuth.existRptApprove", memberVO); 
	}
	
	/**
	 * 견문권한 레코드가 없으면 insert한다.
	 * 
	 * @param memberVO 사용자VO
	 * @return 1:성공, 0:데이터존재, -1:오류발생
	 */
	public int insertRptApprove(final MemberVO memberVO) {
		int result = -1;
		try {
			if (0 == existRptApprove(memberVO)) {
				result = insert("MemberAuth.insertRptApprove", memberVO);
			} else {
				result = 0;
			}
		} catch (Exception e) {
			result = -1;
		}

		return result;
	}
}
