package kcg.faics.member.service;

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

import org.springframework.web.multipart.MultipartFile;

import kcg.faics.cmmn.bbs.BaseBbsService;
import kcg.faics.member.vo.ExMemberVO;
import kcg.faics.member.vo.MemberSearchVO;
import kcg.faics.member.vo.MemberVO;

/** 
 * MemberService.java
 * @author 임새미 
 * @since 2016. 11. 4.
 *
 *  	 수정일                     수정자                                       수정내용
 *  -------------	--------	---------------------------
 *  2016. 11. 4. 	    임새미				       최초생성
 * 
 */
public interface MemberService extends BaseBbsService<MemberSearchVO, MemberVO> {
	
	/**
	 * 외사경찰 목록(no paging)읇 반환한다.
	 * 
	 * @param searchVO
	 *            검색조건 VO
	 * @return 게시물 리스트
	 * @throws Exception
	 *             기본 예외 처리
	 */
	List<MemberVO> getFaListAll(MemberSearchVO searchVO) throws Exception;
	
	/**
	 * 사용자 비밀번호를 수정한다.
	 * 
	 * @param dataVO 수정할 데이터
	 * @return Map("result") = 1 : 성공, <else> : 실패
	 * @throws Exception 기본 예외 처리
	 */
	HashMap<String, Object> updatePassword(MemberVO dataVO) throws Exception;
	public HashMap<String, Object> initPassword(MemberVO dataVO, String[] users) throws Exception;
	
	public List<HashMap<String, Object>> getCapacityManagement() throws Exception;
	public List<HashMap<String, Object>> getCareerStatus() throws Exception;

	/**
	 * 사용자 정보를 삭제한다.
	 * 
	 * @param dataVO
	 *            사용자 OV
	 * @param userType
	 *            사용자 구분 (외사경찰, 일반경찰) : UserType 클래스 참조
	 * @return Map("result") = 1 : 성공, <else> : 실패
	 * @throws Exception
	 *             기본 예외 처리
	 */
	HashMap<String, Object> delete(MemberVO dataVO, String userType) throws Exception;
	
	/**
	 * 로그인 실패시 처리 로직.
	 * 
	 * @param dataVO
	 *            사용자 VO
	 * @return Map("result") = 1 : 성공, <else> : 실패
	 * @throws Exception
	 *             기본 예외 처리
	 */
	HashMap<String, Object> failLogin(MemberVO dataVO) throws Exception;
	
	/**
	 * 로그인 실패횟수를 초기화 시킨다.
	 * 
	 * @param dataVO
	 *            사용자 VO
	 * @return Map("result") = 1 : 성공, <else> : 실패
	 * @throws Exception
	 *             기본 예외 처리
	 */
	HashMap<String, Object> initChkcnt(MemberVO dataVO) throws Exception;

	/**
	 * 외사경찰 정보를 수정한다.
	 * 
	 * @param dataVO
	 *            사용자 VO
	 * @param fileMap
	 *            MultipartFile형태의 파일정보
	 * @param deleteFiles
	 *            삭제할 파일리스트
	 * @return Map("result") = 1 : 성공, <else> : 실패
	 * @throws Exception
	 *             기본 예외 처리
	 */
	HashMap<String, Object> updateFaMember(MemberVO dataVO, Map<String, MultipartFile> fileMap, String[] deleteFiles) throws Exception;

	/**
	 * 일반경찰 정보를 수정한다.
	 * 
	 * @param dataVO
	 *            사용자 VO
	 * @throws Exception
	 *             기본 예외 처리
	 */	
	int updateCmmnMemberInfo(final MemberVO dataVO) throws Exception;
	
	/**
	 * 한 건의 과거외사경찰 정보를 반환한다.
	 * 
	 * @param searchVO
	 *            검색조건 VO
	 * @return 과거외사경찰 정보
	 * @throws Exception
	 *             기본 예외 처리
	 */
	ExMemberVO selectExMember(ExMemberVO searchVO) throws Exception;
	
	/**
	 * 과거외사경찰 목록을 반환한다.
	 * 
	 * @param memberSearchVO
	 *            검색, 페이지 정보 객체
	 * @return 과거외사경찰 목록 (map)
	 * @throws Exception
	 *             기본 예외 처리
	 */
	List<HashMap<String, Object>> exmemberList(MemberSearchVO memberSearchVO) throws Exception;
	
	/**
	 * 과거외사경찰 목록을 반환한다.
	 * 
	 * @param memberSearchVO
	 *            검색, 페이지 정보 객체
	 * @return 과거외사경찰 목록 (vo)
	 * @throws Exception
	 *             기본 예외 처리
	 */
	List<ExMemberVO> exmemberVoList(MemberSearchVO memberSearchVO) throws Exception;
	
	/**
	 * 검색 키워드에 따른 총 과거외사경찰 목록을 조회한다.
	 * 
	 * @param searchVO 검색, 페이지 정보 객체
	 * @return 사용자 수
	 * @exception Exception 기본 예외 처리
	 */
	int selectExmemberListCnt(MemberSearchVO searchVO) throws Exception;
	/**
	 * 전체 과거외사경찰 사용자 수 를 가져온다.
	 * 
	 * @return 사용자 수
	 * @throws Exception 기본 예외 처리
	 */
	int selectExmemberTotalCnt(MemberSearchVO searchVO) throws Exception;
	
	/**
	 * 과거외사경찰 정보를 수정한다.
	 * 
	 * @param dataVO
	 *            수정할 과거외사경찰 VO
	 * @return Map("result") = 1 : 성공, <else> : 실패
	 * @throws Exception
	 *             기본 예외 처리
	 */
	HashMap<String, Object> updateExMember(ExMemberVO dataVO) throws Exception;
	
	/**
	 * 과거외사경찰 정보를 삭제한다.
	 * 
	 * @param dataVO
	 *            삭제할 과거외사경찰 VO
	 * @return Map("result") = 1 : 성공, <else> : 실패
	 * @throws Exception
	 *             기본 예외 처리
	 */
	HashMap<String, Object> deleteExMember(ExMemberVO dataVO) throws Exception;
}
