package kcg.imis.cmmn.service;

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

import kcg.imis.cmmn.vo.CodeVO;

/**
 * 
  * @FileName : CodeService.java
  * @Project : 국제해양프로젝트
  * @Date : 2018. 3. 21. 
  * @작성자 : Moon
  * @변경이력 : 
  * @프로그램 설명 : 코드 서비스 인터페이스
 */
public interface CodeService {
	
	/**
	 * 소속 구조.
	 */
	Map<String, String[]> PLACE_CATEGORY = new TreeMap<String, String[]>(String.CASE_INSENSITIVE_ORDER) {
		/**
		 * serialVersionUID.
		 */
		private static final long serialVersionUID = -8213220033671425747L;

		{
			//서해본부
			put("PS92", new String[] { "PS05", "PS06", "PS07", "PS08", "PS09", "ps18" });
			//남해본부
			put("PS93", new String[] { "PS01", "PS09", "PS12", "PS13", "PS98" });
			//동해본부
			put("PS94", new String[] { "PS03", "PS04", "PS10", "PS11" });
			put("PS02", new String[] {});
			put("PS95", new String[] {});
			put("PS96", new String[] {});
			put("PS97", new String[] {});
			put("PS99", new String[] {});
		}
	};
	
	
	/**
	 * 코드 목록 반환
	 * @param group 코드 그룹
	 * @return
	 * @throws Exception 기본 예외 처리
	 */
	List<CodeVO> getCodeList(String group) throws Exception;
	
	List<CodeVO> getCodeList(String group, boolean includeAll) throws Exception;
	
	HashMap<String, String> getCodeMap(String group) throws Exception;
	/**
	 * 코드 상세 반환
	 * @param group 코드 그룹
	 * @param code 코드
	 * @return
	 * @throws Exception 기본 예외 처리
	 */
	CodeVO getCode(String group, String  code) throws Exception;

	/**
	 * 코드를 수정 한다 CodeVO 객체
	 * @param codeVO
	 * @return
	 * @throws Exception 기본 예외 처리
	 */
	int updateCode(final CodeVO codeVO) throws Exception;

	/**
	 * code를 추가한다.
	 * 
	 * @param codeVO CodeVO 객체
	 * @return 성공 - 1, 실패 - 0
	 * @throws Exception 기본 예외 처리
	 */
	int insertCode(final CodeVO codeVO) throws Exception;

	/**
	 * code를 삭제한다.
	 * 
	 * @param codeVO CodeVO 객체
	 * @return 성공 - 1, 실패 - 0
	 * @throws Exception 기본 예외 처리
	 */
	int deleteCode(final CodeVO codeVO) throws Exception;
	
	public List<CodeVO> getPlace1SubList(final String place1Code) throws Exception;
	
	public List<CodeVO> getPlace1SubListWithMain(final String place1Code) throws Exception;
	
	public String getPlace1HighCode(final String place1Code) throws Exception;
}
