package com.dbs.mplus;

import org.springframework.util.StringUtils;

import com.dbs.mplus.framework.FrameworkConstants;
import com.dbs.mplus.framework.template.MPlusServiceDomain;
/**
 * 서비스에서 사용하는 상수들 
 * @author aple 
 *
 */
public abstract class MPlusConstants {
	/* 관리자 session timeout */ 
	public static final int ADMIN_SESSION_TIMEOUT_SEC = 60 * 60; // 60초 X 60개 = 1시간  
	
	/**
	 * M-Care Plus 실험용 사용자
	 * iOS 앱 심사용 데모 테스트를 위한 코드이기도 함
	 * 
	 * @author aple
	 *
	 */
	
	/**
	 * 현재까지 M-Care Plus는 iOS앱을 앱스토어에 올린적이 없어서 아래 테스트 USER를 사용한 적이 없음. 
	 * 따라서, 실제로 사용하기위해서는 아래 코드를 변경해야할 수 도 있습니다.
	 * 2017.05.10 siyoung.ahn 
	 */
	
	public static class MP_TEST_USER {
		// 실험용 사용자를 활성화 시킬지 여부 
		public static final boolean ACTIVATE = true; 
		
		public enum INFO { 
			USER1("1500150", "홍광호", "19820406", "01029820406", "11111"), 
			USER2("104787", "정선아", "19841012", "01029841012", "11111");
			
			private String userId; 
			private String userName; 
			private String birthDt; 
			private String cellPhoneNumber; 
			private String tempPwd; 
			
			private INFO(String userId, String userName, String birthDt, String cellPhoneNumber, String tempPwd) { 
				this.userId = userId; 
				this.userName = userName; 
				this.birthDt = birthDt; 
				this.cellPhoneNumber = cellPhoneNumber; 
				this.tempPwd = tempPwd; 
			}
			
			/**
			 * pId로 테스트 사용자 정보 찾기 
			 * @param pId
			 * @return
			 */
			public static INFO convert(String userId) { 
				if(StringUtils.isEmpty(userId)) {
					return null; 
				}
				
				INFO[] infos = INFO.values(); 
				
				for(INFO i : infos) { 
					if(i.getUserId().equals(userId)) {
						return i; 
					}
				}
				
				return null; 
			}
			
			/**
			 * 테스트 ID인지 여부 
			 * @param pId
			 * @return
			 */
			public static boolean isTestId(String pId) { 
				if(StringUtils.isEmpty(pId)) {
					return false; 
				}
				
				INFO info = convert(pId); 
				if(info != null) { 
					return true; 
				}
				
				return false; 
			}
			
			/**
			 * 식별번호 
			 * @return
			 */
			public String getUserId() { 
				return this.userId; 
			}
			/**
			 * 이름 
			 * @return
			 */
			public String getUserName() { 
				return this.userName; 
			}
			/**
			 * 생년월일 
			 * @return
			 */
			public String getBirthDt() { 
				return this.birthDt; 
			}
			/**
			 * 전화번호 
			 * @return
			 */
			public String getCellPhoneNumber() { 
				return this.cellPhoneNumber; 
			}
			/**
			 * 임시비밀번호 
			 * @return
			 */
			public String getTempPassword() { 
				return this.tempPwd; 
			}
		}

		// 실험용 사용자의 SMS 본인인증시 전달될 인증 코드값 
		public static final String SMS_CERTIFICATION_CODE = "123456";
		// 실험용 사용자 임시 비밀번호 
		public static final String TEMP_PWD = "11aabb**"; 
		// 테스트용 진료과 코드 
		public static final String DEPARTMENT_CODE = "0000000000"; 
	}
	
	/* ---------------------------------------------------
	 * 병원목록 (병원이 바뀌면 바뀔 상수 값) 
	 * 20180806 shinsunwoo 세션에 기록될 code는 [MP_]로 시작해야 함
	  ---------------------------------------------------*/
	public static enum HOSPITAL {
		MPLUS_LOCAL2("MP_LOCAL2", "M-Care Plus Local2", "http://127.0.0.1:8080", "/mcare-plus", FrameworkConstants.URI_SPECIAL_PAGE.INDEX.getPage()),
		MPLUS_LOCAL("MP_LOCAL", "M-Care Plus Local", "http://localhost:8080", "/mcare-plus", FrameworkConstants.URI_SPECIAL_PAGE.INDEX.getPage()),
		MPLUS_LOCAL3("MP_LOCAL3", "M-Care Plus Local3", "http://192.168.1.18:48080", "/mcare-plus", FrameworkConstants.URI_SPECIAL_PAGE.INDEX.getPage()),
		MPLUS("MP_KUH", "M-Care Plus KUH", "https://nps.kuh.ac.kr", "/mcare-plus", FrameworkConstants.URI_SPECIAL_PAGE.INDEX.getPage()),
		MPLUS_COOK("MP_HYUMC_GURI_COOK", "M-Care Plus Hyumc Guri", "https://guriapp.hyumc.com", "/mcare-plus", FrameworkConstants.URI_SPECIAL_PAGE.INDEX.getPage()),
		MPLUS_DEV("MP_KUH_DEV", "M-Care Plus KUH Dev", "https://nps.kuh.ac.kr", "/mcare-plus-dev", FrameworkConstants.URI_SPECIAL_PAGE.INDEX.getPage());
		
		private MPlusServiceDomain serviceDomain; 
		/**
		 * 생성자 
		 * @param code
		 * @param hospitalName
		 * @param domain
		 * @param contextName
		 * @param startPage
		 */
		private HOSPITAL(String code, String hospitalName, String domain, String contextName, String startPage) { 
			this.serviceDomain = new MPlusServiceDomain(code, hospitalName, domain, contextName, startPage); 
		}
		
		/**
		 * 코드로 병원 찾기 
		 * @param code
		 * @return
		 */
		public static HOSPITAL convertCode(String code) { 
			if(StringUtils.isEmpty(code)) {
				return null; 
			}
			
			HOSPITAL[] h = HOSPITAL.values(); 
			
			for(HOSPITAL hospital : h) { 
				if(hospital.serviceDomain.getCode().equals(code)) {
					return hospital; 
				}
			}
			
			return null; 
		}	
		
		/**
		 * 병원코드 구하기 
		 * @param serverAddr 환경설정의 server.service.addr 값. request객체에서 뽑으면 주소가 변경되는 경우가 있기 때문임 
		 * @param contextName 컨텍스트 명 
		 * @return
		 */
		public static String getCode(String serverAddr, String contextName) { 
			// 보정 
			if(StringUtils.isEmpty(serverAddr)) {
				return null; 
			}
			if(contextName == null) { 
				contextName = ""; 
			}
			
			HOSPITAL[] h = HOSPITAL.values(); 
			for(HOSPITAL hospital : h) { 
				// 도메인이 같으면 
				if(hospital.getDomain().equals(serverAddr)) {
					// context까지 확인 
					if(hospital.getContextName().equals(contextName)) {
						return hospital.getCode(); 
					}
				}
			}
			
			return null; 
		}
		
		
		/**
		 * 구분코드 
		 * @return
		 */
		public String getCode() { 
			return this.serviceDomain.getCode(); 
		}
		/**
		 * 병원명 
		 * @return
		 */
		public String getHospitalName() { 
			return this.serviceDomain.getHosptialName(); 
		}
		/**
		 * 도메인 
		 * @return
		 */
		public String getDomain() { 
			return this.serviceDomain.getDomain(); 
		}
		
		public String getContextName() { 
			return this.serviceDomain.getContextName(); 
		}
		/**
		 * 시작페이지 
		 * @return
		 */
		public String getStartPage() {
			return this.serviceDomain.getStartPage(); 
		}
		/**
		 * 링크걸때 사용할 주소 
		 * @return
		 */
		public String getLinkUrl() { 
			return this.serviceDomain.getLinkUrl(); 
		}		
	}
	
	public static enum SESSION {
		// 진료과 코드
		DEPT_CODE(FrameworkConstants.SESSION_PREFIX + "DEPT_CODE"), 
		// 진료과 이름
		DEPT_NAME(FrameworkConstants.SESSION_PREFIX + "DEPT_NAME"), 
		// 선택한 병원
		USER_HOSPITAL(FrameworkConstants.SESSION_PREFIX + "USER_HOSPITAL"),
		// 사용자가 지정한 index 페이지 코드 
		ACCESS_MENU(FrameworkConstants.SESSION_PREFIX + "ACCESS_MENU"),
		// job 종류 코드
		JOB_KIND_CD(FrameworkConstants.SESSION_PREFIX + "JOB_KIND_CD"),
		// job 종류 이름
		JOB_KIND_NM(FrameworkConstants.SESSION_PREFIX + "JOB_KIND_NM"),
		// 암호화된 패스워드
		ENCRYPT_PSWD(FrameworkConstants.SESSION_PREFIX + "ENCRYPT_PSWD");
		
		private String key; 
		private SESSION(String key) { 
			this.key = key; 
		}
		/**
		 * 지정된 값 반환 
		 * @return
		 */
		public String getKey() { 
			return this.key; 
		}
		
		@Override 
		public String toString() { 
			return this.key; 
		}
	}
	
}
