package com.dbs.mplus.service.api.util;

import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.dbs.mplus.exception.mobile.ApiCallException;
import com.dbs.mplus.framework.FrameworkConstants;
import com.dbs.mplus.framework.util.ConvertUtil;
import com.dbs.mplus.framework.util.DateUtil;
import com.dbs.mplus.framework.util.ResponseUtil;
import com.dbs.mplus.service.MPlusConfigureService;
import com.dbs.mplus.service.api.MPlusApi;

/**
 * 병원에서 테스트용 환자를 제공해 주지 않아서 어쩔 수 없이 생겨난 클래스 
 * 인터페이스는 됐다 치고, 내부로 데이터를 흘려보내주기 위함이다. 
 * 각 Controller에 테스트 코드를 심어두자니 릴리즈 할때 코드가 더러워질것 같아서 한곳에 모아두기로 한다. 
 * 
 * @author aple
 *
 */
@Component 
public class TestUserDataGenerator {
	private final Logger logger = LoggerFactory.getLogger(TestUserDataGenerator.class);
	
	@Autowired 
	private MPlusConfigureService configureService; 
	
	
	/**
	 * 가짜 api 호출 
	 * @param api
	 * @param reqMap
	 * @return
	 * @throws ApiCallException
	 */
	@SuppressWarnings("unchecked")
	public Map<String, Object> call(MPlusApi api, Map<String, Object> reqMap) throws ApiCallException {
		// 연산자 확인 
		if(api == null) { 
			throw new ApiCallException("mplus.error.param", "파라미터를 확인해주세요", null); 
		}
		// 파라미터 확인 
		if(reqMap == null) { 
			reqMap = Collections.emptyMap(); 
		}
		
		// 메소드 이름 만들어서 
		String apiUrl = api.getApiUrl(); 
		apiUrl = apiUrl.replace("/", "_"); 
		
		// 호출
		try { 
			final Class<?> clazz = TestUserDataGenerator.class; 
			final Method method = clazz.getDeclaredMethod(apiUrl, Map.class); 
			
			return (Map<String, Object>) method.invoke(this, reqMap); 
		}
		catch(NoSuchMethodException ex) { 
			logger.debug("테스트 데이터 생성 대상이 아니라서 테스트 환자번호로 실제 메소드를 호출할 것임. apiUrl=" + apiUrl);
		}
		catch(Exception ex) { 
			throw new ApiCallException("mplus.error.system", ex.getMessage(), null); 
		}

//		return ResponseUtil.getExtraMessageMap("이것은 테스트환자용 테스트 코드. 그렇지만 예상하지못한케이스입니다."); 
		return null;
	}
	
	// 로그인 정보 있는지?
/*	public Map<String, Object> _user_userinfo_getLoginInfo(Map<String, Object> map) {
		Map<String, Object> resultMap = null; 

		// 
		resultMap = new HashMap<>(); 
		resultMap.put("useAttrOrder", BigDecimal.ONE);
		
		return ResponseUtil.wrapResultMap(resultMap); 
	}
	
	// 로그인 요청 후 응답받기
	public Map<String, Object> _user_login_loginSubmit(Map<String, Object> map) {
		Map<String, Object> resultMap = null; 

		// 
		resultMap = new HashMap<>(); 
		resultMap.put("emplno", map.get("userid"));
		resultMap.put("name", "테스트유저");
		resultMap.put("dutplcedeptcd", "20600000000");
		resultMap.put("dutplcedeptnm", "소화기내과");
		resultMap.put("mobile", "O");
		
		return ResponseUtil.wrapResultMap(resultMap); 
	}*/
	
	// USER_USERINFO_GETUSERATTRLIST
/*	public Map<String, Object> _user_userinfo_getUserAttrList(Map<String, Object> map) {
		Map<String, Object> resultMap = null; 
		List<Map<String, Object>> list = new ArrayList<>(); 
		// 
		resultMap = new HashMap<>(); 
		resultMap.put("userId", map.get("userid"));
		resultMap.put("userName", "테스트유저");
		resultMap.put("userAttrOrder", 1);
		resultMap.put("hospitalId", "seoul");
		resultMap.put("hospitalName", "서울");
		resultMap.put("dutyId", "doctor");
		resultMap.put("dutyName", "의사");
		resultMap.put("workId", "main");
		resultMap.put("workName", "주치의");
		
		list.add(resultMap); 
		return ResponseUtil.wrapResultMap(list); 
	}*/

	// 동의서 저장 관련 테스트 함수들
	

//	CONSENT_SAVE_SAVETEMPDATA
	public Map<String, Object> _consent_save_saveTempData(Map<String, Object> map) {
		Map<String, Object> resultMap = null; 
		
		resultMap = new HashMap<>();
		resultMap.put("consentMstRid", map.get("consentMstRid"));
		
		return resultMap; 
	}

//	CONSENT_SAVE_SAVEMEDICALHISTORY
	public Map<String, Object> _consent_save_saveMedicalHistory(Map<String, Object> map) {
		// 맞는지 모르겠다?
		Map<String, Object> resultMap = null; 
		
		resultMap = new HashMap<>();
		resultMap.put("consentMstRid", map.get("consentMstRid"));
		
		return resultMap; 
	}

//	CONSENT_SAVE_SAVECOMPLETE
	public Map<String, Object> _consent_save_saveComplete(Map<String, Object> map) {
		Map<String, Object> resultMap = null; 
		
		resultMap = new HashMap<>();
		resultMap.put("consentMstRid", map.get("consentMstRid"));
		
		return resultMap; 
	}

//	CONSENT_SAVE_GETFILENAME
	public String _consent_save_getFileName(Map<String, Object> map) {
		String fileName = "파일경로";
		return fileName;
	}

//	CONSENT_SAVE_SAVEIMAGEUPLOADINFO
	public Map<String, Object> _consent_save_saveImageUploadInfo(Map<String, Object> map) {
		Map<String, Object> resultMap = new HashMap<>();
		resultMap.put("consentImageRid", "111222");
		
		return resultMap; 
	}
	
	
	
	
	/**
	 * 승인요청 가능한 목록 
	 * @param map
	 * @return
	 */
	public Map<String, Object> _payment_approve_getPaymentList(Map<String, Object> map) { 
		if(this.logger.isDebugEnabled()) {
			this.logger.debug(FrameworkConstants.NEW_LINE + "승인요청가능한목록 테스트 데이터 생성합니다.");
		}
		
		
		List<Map<String, Object>> list = new ArrayList<>(); 
		Map<String, Object> resultMap = null; 
//		String goodsId = null; 
	
		// 목록은 필요한 것만 건져서 화면에 내려줌 
		resultMap = new HashMap<>(); 
		resultMap.put("departmentNm", "가정의학과");  // 진료과명 
		resultMap.put("doctorNm", "허준");  // 진료의명 
		resultMap.put("dataDate", DateUtil.convertYYYYMMDD(new Date()));  // 진료날짜 
		resultMap.put("dataTime", "1630");  // 진료시간 
		resultMap.put("receiptNo", "1"); // 접수번호 
		resultMap.put("orderCd", "O"); 
		resultMap.put("departmentCd", "DBSTEST_01"); 
		list.add(resultMap); 
		
		// 
		resultMap = new HashMap<>(); 
		resultMap.put("departmentNm", "이비인후과");  // 진료과명 
		resultMap.put("doctorNm", "심청");  // 진료의명 
		resultMap.put("dataDate", DateUtil.convertYYYYMMDD(new Date()));  // 진료날짜 
		resultMap.put("dataTime", "1630");  // 진료시간 
		resultMap.put("receiptNo", "2"); // 접수번호 
		resultMap.put("orderCd", "O"); 
		resultMap.put("departmentCd", "DBSTEST_02"); 
		list.add(resultMap); 			
		
		return ResponseUtil.wrapResultMap(list); 
	}
	/**
	 * 결제내용 상세 
	 * @param map
	 * @return
	 */
	public Map<String, Object> _payment_approve_getPaymentDetail(Map<String, Object> map) { 
		// 변환 
		Map<String, Object> resultMap = new HashMap<String, Object>(); 
		
		// 진료일자 
		resultMap.put("dataDate", DateUtil.convertYYYYMMDD(new Date()));
		// 진료시간 
		resultMap.put("dataTime", "1630"); 
		// 납부할 금액
		int r = (int) (System.currentTimeMillis() % 3);
		switch(r) { 
		case  0 : 
			resultMap.put("amount", "1360"); 
			resultMap.put("payAll", "Y");  // 부분결제 여부 
			break; 
			
		case 1 :
			resultMap.put("amount", "3259836"); 
			resultMap.put("payAll", "N"); // 부분결제 여부. Y이면 부분결제 불가능이고, 무조건 다 내야하는것. 
			break; 
			
		case 2 : 
		default : 
			resultMap.put("amount", "8620"); 
			resultMap.put("payAll", "Y"); // 부분결제 여부 
			break; 
		}
		
		// 접수번호 
		resultMap.put("receiptNo", "TEST_DATA"); 
		// 환자번호 
		resultMap.put("pId", map.get("pId")); 
		resultMap.put("pName", map.get("pName")); 
		// 진료유형 
		resultMap.put("orderCd", "O"); 	
		
		// 이 거래 site 
		resultMap.put("orderId", System.currentTimeMillis() + ""); 
		resultMap.put("siteId", "demo"); 
		resultMap.put("vatMoney", "0"); 
		resultMap.put("serviceMoney", "0"); 
		resultMap.put("saltValue", ""); 
		resultMap.put("approvalUrl", ""); 
		
		
		
		return ResponseUtil.wrapResultMap(resultMap); 
	}		
	
	/**
	 * 입원환자 검사안내 
	 * @param map
	 * @return
	 */
	public Map<String, Object> _guide_inpatientexam_getList(Map<String, Object> map) { 
		if(this.logger.isDebugEnabled()) {
			this.logger.debug(FrameworkConstants.NEW_LINE + "입원환자 검사안내 테스트 데이터 생성합니다.");
		}
		
		List<Map<String, Object>> list = new ArrayList<>(); 
		Map<String, Object> resultMap = null; 
		String todayDate = DateUtil.convertYYYYMMDD(DateUtil.getStartDate(0)); 
		String tomorrowDate = DateUtil.convertYYYYMMDD(DateUtil.getEndDateAfter(1)); 
		
		// 오늘 (1) 
		resultMap = new HashMap<>(); 
		resultMap.put("dataDate", todayDate);
		resultMap.put("dataTime", "1300"); 
		resultMap.put("examNm", "뇌신경검사"); 
		resultMap.put("dataOrder", 1);
		resultMap.put("typeCd", "오늘"); 
		resultMap.put("note", "동관2층에서 진행합니다."); 
		list.add(resultMap); 

		// 오늘 (2) 
		resultMap = new HashMap<>(); 
		resultMap.put("dataDate", todayDate);
		resultMap.put("dataTime", "1400"); 
		resultMap.put("examNm", "초음파검사"); 
		resultMap.put("dataOrder", 2);
		resultMap.put("typeCd", "오늘"); 
		resultMap.put("note", "30분정도 소요됩니다."); 
		list.add(resultMap); 		

		// 내일  (1) 
		resultMap = new HashMap<>(); 
		resultMap.put("dataDate", tomorrowDate);
		resultMap.put("dataTime", "1300"); 
		resultMap.put("examNm", "MRI검사"); 
		resultMap.put("dataOrder", 1);
		resultMap.put("typeCd", "내일"); 
		resultMap.put("note", "검사 시 부동자세를 유지하셔야합니다."); 
		list.add(resultMap); 

		
		return ResponseUtil.wrapResultMap(list); 
	}	

	/**
	 * 도착확인 대상 
	 * 
	 * @param map
	 * @return
	 */
	public Map<String, Object> _arrival_arriveConfirmTargetList(Map<String, Object> map) { 
		if(this.logger.isDebugEnabled()) {
			this.logger.debug(FrameworkConstants.NEW_LINE + "도착확인 대상 테스트 데이터 생성합니다.");
		}

		
		
		List<Map<String, Object>> list = new ArrayList<>(); 
		Map<String, Object> resultMap = null; 
		Date today = new Date(); 
		
		// 
		resultMap = new HashMap<String, Object>(); 
		resultMap.put("receiptNo", Long.MAX_VALUE - 1); 
		resultMap.put("dataDate", DateUtil.convertYYYYMMDD(today)); 
		resultMap.put("dataTime", "1600"); 
		resultMap.put("doctorNm", "실험의사1"); 
		resultMap.put("departmentNm", "실험진료과1"); 
		resultMap.put("crmCd", "-"); 
		resultMap.put("progressStatusCd", "R"); // 접수 : 도착확인 대상 
		resultMap.put("progressStatusNm", "접수");
		list.add(resultMap); 
		
		// 
		resultMap = new HashMap<String, Object>(); 
		resultMap.put("receiptNo", Long.MAX_VALUE - 2); 
		resultMap.put("dataDate", DateUtil.convertYYYYMMDD(today)); 
		resultMap.put("dataTime", "1630"); 
		resultMap.put("doctorNm", "실험의사2"); 
		resultMap.put("departmentNm", "실험진료과2"); 
		resultMap.put("crmCd", "806호"); 
		resultMap.put("progressStatusCd", "W"); // 대기 : 취소대상 
		resultMap.put("progressStatusNm", "대기");
		list.add(resultMap); 		
		
		// 
		resultMap = new HashMap<String, Object>(); 
		resultMap.put("receiptNo", Long.MAX_VALUE - 3); 
		resultMap.put("dataDate", DateUtil.convertYYYYMMDD(today)); 
		resultMap.put("dataTime", "1700"); 
		resultMap.put("doctorNm", "실험의사3"); 
		resultMap.put("departmentNm", "실험진료과3"); 
		resultMap.put("crmCd", "207호"); 
		resultMap.put("progressStatusCd", "C"); // 완료 
		resultMap.put("progressStatusNm", "완료");
		list.add(resultMap); 
		
		// 
		resultMap = new HashMap<String, Object>(); 
		resultMap.put("receiptNo", Long.MAX_VALUE - 4); 
		resultMap.put("dataDate", DateUtil.convertYYYYMMDD(today)); 
		resultMap.put("dataTime", "1800"); 
		resultMap.put("doctorNm", "실험의사4"); 
		resultMap.put("departmentNm", "실험진료과4"); 
		resultMap.put("crmCd", "-"); 
		resultMap.put("progressStatusCd", "H"); // 보류
		resultMap.put("progressStatusNm", "보류");
		list.add(resultMap); 		
		
		return ResponseUtil.wrapResultMap(list); 
	}
	

	/**
	 * 도착확인 및 취소 
	 * @param map
	 * @return
	 */
	public Map<String, Object> _arrival_reqArrivedConfirm(Map<String, Object> map) {
		if(this.logger.isDebugEnabled()) {
			this.logger.debug(FrameworkConstants.NEW_LINE + "도착확인 및 취소 가짜 응답을 생성합니다. ");
		}
		
		String state = (String) map.get("state"); 
		
		switch(state) { 
		case "A" : 
			{
				Map<String, Object> resMap = new HashMap<String, Object>(); 
				resMap.put("code", "S"); 
				resMap.put("message", "도착 확인이 완료 되었습니다. (테스트 메시지)"); 
				return ResponseUtil.wrapResultMap(resMap); 
			}
			
		case "C" : 
			{
				Map<String, Object> resMap = new HashMap<String, Object>(); 
				resMap.put("code", "아직모름"); 
				resMap.put("message", "도착 알림이 취소 되었습니다. (테스트 메시지)"); 
				return ResponseUtil.wrapResultMap(resMap); 
			}
			
		default : 
			return ResponseUtil.wrapExtraMessageMap("진찰료가 수납 되지 않았습니다. 원무창구에서 수납 후 오십시오."); 
		}
	}

	
	/**
	 * 진료대기시간 조회 
	 * @param map
	 * @return
	 */
	public Map<String, Object> _waittime_getwaitingList(Map<String, Object> map) { 
		if(this.logger.isDebugEnabled()) {
			this.logger.debug(FrameworkConstants.NEW_LINE + "진료대기시간조회 테스트 데이터 생성합니다.");
		}
		
		
		List<Map<String, Object>> list = new ArrayList<>(); 
		Map<String, Object> resultMap = null; 

//		SimpleDateFormat hmFormat = new SimpleDateFormat("hhmm");
//		long currTime = System.currentTimeMillis(); 
//		long gap = 1000 * 60; // 1분  
//		
//		// 
//		resultMap = new HashMap<String, Object>(); 
//		resultMap.put("ranks", 1);
//		resultMap.put("progressStatusNm", "호명하면 들어오십시요"); 
//		resultMap.put("doctorNm", "실험의사1"); 
//		resultMap.put("dataTime", hmFormat.format(new Date(currTime + (gap * 2)))); 
//		resultMap.put("departmentNm", "실험용진료과1"); 
//		list.add(resultMap); 		
//				
//		// 
//		resultMap = new HashMap<String, Object>(); 
//		resultMap.put("ranks", 15);
//		resultMap.put("progressStatusNm", "대기해주세요"); 
//		resultMap.put("delayTime", "3"); 
//		resultMap.put("doctorNm", "실험의사2"); 
//		resultMap.put("dataTime", hmFormat.format(new Date(currTime + (gap * 10)))); 
//		resultMap.put("departmentNm", "실험용진료과2"); 
//		list.add(resultMap); 
//		
		// 당일접수자는 예약시간(dataTime)이 없음 
		resultMap = new HashMap<String, Object>(); 
		resultMap.put("progressStatusNm", "호명하면 들어오세요."); 
		resultMap.put("delayTime", "3"); 
		resultMap.put("doctorNm", "허준"); 
		resultMap.put("dataTime", "2132"); 
		resultMap.put("departmentNm", "가정의학과"); 
		list.add(resultMap); 		
		
		return ResponseUtil.wrapResultMap(list); 
//		return ResponseUtil.wrapExtraMessageResultMap("결과와 함께가는 메시지입니다.", list); 
	}

	/**
	 * 가셔야할 곳. 화면으로 가는 데이터 변환은 controller에 있음  
	 * @param map
	 * @return
	 */
	public Map<String, Object> _roadlist_getVisitInfo(Map<String, Object> map) { 
		if(this.logger.isDebugEnabled()) {
			this.logger.debug(FrameworkConstants.NEW_LINE + "가야할곳 테스트 데이터 생성합니다.");
		}
		
		
		List<Map<String, Object>> list = new ArrayList<>(); 
		Map<String, Object> resultMap = null; 
		
		// 
		resultMap = new HashMap<String, Object>(); 
		resultMap.put("departmentNm", "가정의학과");
		resultMap.put("doctorNm", "허준"); 
		resultMap.put("poiNm", "채혈실"); 
		resultMap.put("nextLocation", "채혈실"); 
		list.add(resultMap); 
		// 
		resultMap = new HashMap<String, Object>(); 
		resultMap.put("departmentNm", "마취통증의학과");
		resultMap.put("doctorNm", "박문수"); 
		resultMap.put("poiNm", "심전도실"); 
		resultMap.put("nextLocation", "심전도실"); 
		list.add(resultMap); 
//		
//		// 
//		resultMap = new HashMap<String, Object>(); 
//		resultMap.put("departmentNm", "재활의학과");
//		resultMap.put("doctorNm", "실험박문수"); 
//		resultMap.put("poiNm", "POI_근력운동실"); 
//		resultMap.put("nextLocation", "화면용_근력운동실"); 
//		list.add(resultMap); 
//		// 
//		resultMap = new HashMap<String, Object>(); 
//		resultMap.put("departmentNm", "방사선종양학과");
//		resultMap.put("doctorNm", "실험심청이"); 
//		resultMap.put("poiNm", "POI_세포검사실"); 
//		resultMap.put("nextLocation", "화면용_세포검사실"); 
//		list.add(resultMap); 	
//		// 
//		resultMap = new HashMap<String, Object>(); 
//		resultMap.put("departmentNm", "방사선종양학과");
//		resultMap.put("doctorNm", "실험심청이"); 
//		resultMap.put("poiNm", "POI_혈액검사실"); 
//		resultMap.put("nextLocation", "화면용_혈액검사실"); 
//		list.add(resultMap); 

		return ResponseUtil.wrapResultMap(list); 
		//throw new ApiCallException("mplus.error.param", "실험용 예외입니다.", null); 
	}
	
	/**
	 * 처방조회 
	 * @param map
	 * @return
	 */
	public Map<String, Object> _prescription_getPrescList(Map<String, Object> map) {
		if(this.logger.isDebugEnabled()) {
			this.logger.debug(FrameworkConstants.NEW_LINE + "처방조회 테스트 데이터 생성합니다.");
		}
		
		List<Map<String, Object>> list = new ArrayList<>(); 
		Map<String, Object> resultMap = null; 
		
		//
		resultMap = new HashMap<String, Object>(); 
		resultMap.put("departmentNm", "소화기내과"); 
		resultMap.put("prescriptionDt", "20160106"); 
		resultMap.put("medicineNm", "아모디핀정 5mg"); 
		resultMap.put("dose", "2tab"); 
		resultMap.put("doseTm", "1"); 
		resultMap.put("doseDay", "90"); 
		resultMap.put("usageNm", "아침식후30분복용하십시오"); 
		resultMap.put("effectNm", "혈압강하, 협심증 및 심근허혈증 치료제"); 
		resultMap.put("dangerNote", "갑작스런 복용중지를 금함.지속적인 두통, 심계항진, 체중증가, 호흡곤란 지속시에는 의사ㆍ약사에게 알림.졸음, 어지러움이 나타날 수 있으므로 운전 등 위험이 수반되는 기계조작시 주의"); 
		resultMap.put("insuranceCd", "643501600"); 
		list.add(resultMap); 
		
		//
		resultMap = new HashMap<String, Object>(); 
		resultMap.put("departmentNm", "가정의학과"); 
		resultMap.put("prescriptionDt", "20160106"); 
		resultMap.put("medicineNm", "인플루엔자백신(Sky Cellflu)(직원용) 0.5ml"); 
		resultMap.put("dose", "3tab"); 
		resultMap.put("doseTm", "3"); 
		resultMap.put("doseDay", "90"); 
		resultMap.put("usageNm", "VACC예방접종 (냉장보관)"); 
//		resultMap.put("effectNm", "담즙분비,담석용해 및 간보호제"); 
//		resultMap.put("dangerNote", "제산제와 병용시 최소 2시간 이상의 간격을 두고 투여.간질환 치료는 정기적인 검진이 시행되어야 함.담석이 용해되는 시간은 보통 6~24개월이기 때문에 치료성과에 대해 6개월마다 뢴트겐이나 초음파검사를 시행.발열, 호흡곤란, 기침 지속시 투여중지 후 의사ㆍ약사에게 알림"); 
		resultMap.put("insuranceCd", "644704290"); 
		list.add(resultMap); 
				
		//
		resultMap = new HashMap<String, Object>(); 
		resultMap.put("departmentNm", "소화기내과"); 
		resultMap.put("prescriptionDt", "20160106"); 
		resultMap.put("medicineNm", "엔테원 정 0.5mg"); 
		resultMap.put("dose", "1tab"); 
		resultMap.put("doseTm", "1"); 
		resultMap.put("doseDay", "90"); 
		resultMap.put("usageNm", "아침식전1시간복용하십시오"); 
		resultMap.put("effectNm", "만성 B형 간염바이러스 감염의 치료"); 
		//resultMap.put("dangerNote", "없음"); 
		resultMap.put("insuranceCd", "640006450"); 
		list.add(resultMap); 		

		return ResponseUtil.wrapResultMap(list); 
		//return ResponseUtil.wrapExtraMessageMap("결과없이 추가메시지만 있는 경우입니다."); 
	}

	/**
	 * 내번호표 
	 * @param map
	 * @return
	 */
	public Map<String, Object> _ticket_mytickets(Map<String, Object> map) {
		if(this.logger.isDebugEnabled()) {
			this.logger.debug(FrameworkConstants.NEW_LINE + "내번호표 테스트 데이터 생성합니다.");
		}
		
		List<Map<String, Object>> list = new ArrayList<>(); 
		Map<String, Object> resultMap = null; 
		
		if(System.currentTimeMillis() % 2 == 0) {
			// 재발급 실험용 
			resultMap = new HashMap<String, Object>(); 
			resultMap.put("locationNm", "1층");
			resultMap.put("businessNm", "종합원무센터 (접*수납, 통합예약)"); 
			resultMap.put("ticketNo", "37"); 
			resultMap.put("ticketBoxCd", "B1"); 
			resultMap.put("waitingCnd", "2"); 
			resultMap.put("guideValue", "순서대로 처리해드리오니 잠시만 기다려주세요."); 
			resultMap.put("kioskYn", "Y"); 
			resultMap.put("issueDt", DateUtil.convertYYYYMMDD(new Date()) + DateUtil.convertHH24MM(new Date())); 
			list.add(resultMap); 
		} 
		
		
		// 재발급 안되는거 실험용 
		resultMap = new HashMap<String, Object>(); 
		resultMap.put("locationNm", "7동 5층");
		resultMap.put("businessNm", "외과, 비뇨기, 소아청소년, 신장, 정신건강, 척추센터"); 
		resultMap.put("ticketNo", "132"); 
		resultMap.put("ticketBoxCd", "A5"); 
		resultMap.put("waitingCnd", "12"); 
		resultMap.put("guideValue", "순서대로 처리해드리오니 잠시만 기다려주세요."); 
		resultMap.put("kioskYn", "N"); 
		resultMap.put("issueDt", DateUtil.convertYYYYMMDD(new Date()) + "0123"); 
		list.add(resultMap); 

		return ResponseUtil.wrapResultMap(list); 
	}
	
	
	
	
	/**
	 * 외래 진료이력조회 
	 * @param map
	 * @return
	 */
	public Map<String, Object> _history_getOutList(Map<String, Object> map) { 
		if(this.logger.isDebugEnabled()) {
			this.logger.debug(FrameworkConstants.NEW_LINE + "외래진료이력 테스트 데이터 생성합니다.");
		}

		List<Map<String, Object>> list = new ArrayList<>(); 
		Map<String, Object> resultMap = null; 
		
		//
		resultMap = new HashMap<>(); 
		resultMap.put("dataDate", DateUtil.convertYYYYMMDD(DateUtil.getStartDate(10))); 
		resultMap.put("receiptNo", "737165"); 
		resultMap.put("doctorNm", "허준"); 
		resultMap.put("receiptGubunNm", "당일접수"); 
		resultMap.put("pId", map.get("pId")); 
		resultMap.put("dataTime", "2132"); 
		resultMap.put("departmentNm", "가정의학과"); 
		list.add(resultMap); 
		
		//
		resultMap = new HashMap<>(); 
		resultMap.put("dataDate", DateUtil.convertYYYYMMDD(DateUtil.getStartDate(17))); 
		resultMap.put("receiptNo", "972235"); 
		resultMap.put("doctorNm", "실험-박가영"); 
		resultMap.put("receiptGubunNm", "F/U"); 
		resultMap.put("pId", map.get("pId")); 
		resultMap.put("dataTime", "1634"); 
		resultMap.put("departmentNm", "알레르기감염내과"); 
		list.add(resultMap); 		
//		
//		//
//		resultMap = new HashMap<>(); 
//		resultMap.put("dataDate", "20110822"); 
//		resultMap.put("receiptNo", "1"); 
//		resultMap.put("doctorNm", "실험-문경민"); 
//		resultMap.put("receiptGubunNm", "일반건진"); 
//		resultMap.put("pId", map.get("pId")); 
//		resultMap.put("dataTime", "0000"); 
//		resultMap.put("departmentNm", "가정의학과"); 
//		list.add(resultMap); 		

		return ResponseUtil.wrapResultMap(list); 
	}
	
	/**
	 * 예약조회 
	 * @param map
	 * @return
	 */
	public Map<String, Object> _reservation_search_getRevList(Map<String, Object> map) { 
		if(this.logger.isDebugEnabled()) {
			this.logger.debug(FrameworkConstants.NEW_LINE + "예약조회 테스트 데이터 생성합니다.");
		}	
		
		List<Map<String, Object>> list = new ArrayList<>(); 
		Map<String, Object> resultMap = null; 
		
		// 
		resultMap = new HashMap<>(); 
		resultMap.put("reservationMethod", "N"); 
		resultMap.put("dataDate", DateUtil.convertYYYYMMDD(DateUtil.getEndDateAfter(3))); 
		resultMap.put("ordExamKindNm", "진료예약"); 
		resultMap.put("receiptGubunKindNm", "정상"); 
		resultMap.put("doctorId", "11111"); 
		resultMap.put("receiptNo", "0"); 
		resultMap.put("doctorNm", "심홍민"); 
		resultMap.put("departmentCd", "22222"); 
		resultMap.put("dataTime", "1037"); 
		resultMap.put("departmentNm", "소화기내과"); 
		list.add(resultMap); 
		
		return ResponseUtil.wrapResultMap(list); 		
	}
	
	/**
	 * 입원 진료이력조회 
	 * @param map
	 * @return
	 */
	public Map<String, Object> _history_getInList(Map<String, Object> map) { 
		if(this.logger.isDebugEnabled()) {
			this.logger.debug(FrameworkConstants.NEW_LINE + "입원진료이력조회 테스트 데이터 생성합니다.");
		}
		
		
		List<Map<String, Object>> list = new ArrayList<>(); 
		Map<String, Object> resultMap = null; 
		
		// 
		resultMap = new HashMap<>(); 
		resultMap.put("receiptNo", "1"); 
		resultMap.put("departmentCd", "2100000000"); 
		resultMap.put("admissionDt", DateUtil.convertYYYYMMDD(DateUtil.getEndDate(29))); 
		resultMap.put("dischargeDt", DateUtil.convertYYYYMMDD(DateUtil.getEndDate(25))); 
		resultMap.put("attendDoctorNm", "실험-성원준"); 
		resultMap.put("pId", map.get("pId")); 
		resultMap.put("departmentNm", "산부인과"); 
		list.add(resultMap); 
		
		// 
		resultMap = new HashMap<>(); 
		resultMap.put("receiptNo", "1"); 
		resultMap.put("admissionDt", DateUtil.convertYYYYMMDD(DateUtil.getEndDate(13))); 
		resultMap.put("dischargeDt", DateUtil.convertYYYYMMDD(DateUtil.getEndDate(2))); 
		resultMap.put("attendDoctorNm", "실험-김수한무"); 
		resultMap.put("pId", map.get("pId")); 
		resultMap.put("departmentNm", "가정의학과"); 
		list.add(resultMap); 		
		
		
		return ResponseUtil.wrapResultMap(list); 
	}	
	
	/**
	 * 진료비영수증 
	 * @param map
	 * @return
	 */
	public Map<String, Object> _history_getBillDetail(Map<String, Object> map) { 
		if(this.logger.isDebugEnabled()) {
			this.logger.debug(FrameworkConstants.NEW_LINE + "진료비영수증 테스트 데이터 생성합니다.");
		}
		
		
		List<Map<String, Object>> list = new ArrayList<>(); 
		Map<String, Object> resultMap = null; 

		
		// 
		resultMap = new HashMap<>(); 
		resultMap.put("accumulationLclsNm", "주사료"); 
		resultMap.put("patientAmt", "7728");  // 본인부담금 
		resultMap.put("insuranceAmt", "5228"); // 공단부담금 
		resultMap.put("fullPatientAmt", "2000"); // 전액본인부담 
		resultMap.put("selectMedicalAmt", "0");  // 선택진료료 
		resultMap.put("exceptSelectMedicalAmt", "0"); // 선택진료료이외 
		list.add(resultMap); 	
		
		// 
		resultMap = new HashMap<>(); 
		resultMap.put("accumulationLclsNm", "처치료"); 
		resultMap.put("patientAmt", "7000");  // 본인부담금 
		resultMap.put("insuranceAmt", "5000"); // 공단부담금 
		resultMap.put("fullPatientAmt", "2000"); // 전액본인부담 
		resultMap.put("selectMedicalAmt", "0");  // 선택진료료 
		resultMap.put("exceptSelectMedicalAmt", "0"); // 선택진료료이외 
		list.add(resultMap); 
		
		// 
		resultMap = new HashMap<>(); 
		resultMap.put("accumulationLclsNm", "합계"); 
		resultMap.put("patientAmt", "14728");  // 본인부담금 
		resultMap.put("insuranceAmt", "10728"); // 공단부담금 
		resultMap.put("fullPatientAmt", "4000"); // 전액본인부담 
		resultMap.put("selectMedicalAmt", "0");  // 선택진료료 
		resultMap.put("exceptSelectMedicalAmt", "0"); // 선택진료료이외 
		list.add(resultMap); 
		
//		// 
//		resultMap = new HashMap<>(); 
//		//resultMap.put("mainSubCd", ""); 값이 없어서 화면에 key 자체가 안 넘어 갈것임 
//		resultMap.put("accumulationLclsNm", "합계"); 
//		resultMap.put("patientAmt", "99999999"); 
//		resultMap.put("fullPatientAmt", "99999999"); 
//		resultMap.put("selectMedicalAmt", "0"); 
//		resultMap.put("insuranceAmt", "0"); 
//		resultMap.put("exceptSelectMedicalAmt", "0"); 	
//		list.add(resultMap); 		
		
		
		return ResponseUtil.wrapResultMap(list); 			
	} 
	
	
	/**
	 * 진료비 영수증목록 
	 * @param map
	 * @return
	 */
	public Map<String, Object> _history_getBillSum(Map<String, Object> map) { 
		if(this.logger.isDebugEnabled()) {
			this.logger.debug(FrameworkConstants.NEW_LINE + "진료비영수증목록 테스트 데이터 생성합니다.");
		}
		
		
		
		List<Map<String, Object>> list = new ArrayList<>(); 
		Map<String, Object> resultMap = null; 
		
		// 
		resultMap = new HashMap<>(); 
		resultMap.put("receiptNo", "1"); 
		
		resultMap.put("treatDt", "2016628"); 
		resultMap.put("departmentNm", "가정의학과"); 	
		resultMap.put("doctorNm", "허준"); 
		resultMap.put("departmentCd", "2240700000"); 
		resultMap.put("hospitalCd", "031"); 	
		resultMap.put("pId", map.get("pId")); 
		resultMap.put("totalAmt", "15,190"); 	 // 총진료비 
		resultMap.put("insuranceAmt", "13,190"); 	// 공단부담금 
		resultMap.put("patientAmt", "2,000");  // 본인부담금 
		resultMap.put("receiptAmt", "15,190"); 	// 영수액. 서버에서 , 가 넘어오기 때문에 그대로 넘겨줌 
		resultMap.put("outstandingAmt", "0"); 	// 미납액 
		resultMap.put("billReceiptNo", "11"); 	
		resultMap.put("billNo", "7953"); 	
		resultMap.put("receiptDt", "20160121"); 	
		list.add(resultMap); 
		
//		
//		// 여긴 영수증 하나만 보여지는건데.... 일단 서버에서 2개가 넘어와서 2개 만들어주는걸로... 정리가 필요할듯. 
//		resultMap = new HashMap<>(); 
//		resultMap.put("receiptNo", "1"); 
//		resultMap.put("patientAmt", "45,848"); 
//		resultMap.put("treatDt", "20160120"); 
//		resultMap.put("doctorNm", "실험-배주은"); 
//		resultMap.put("departmentCd", "2240700000"); 
//		resultMap.put("hospitalCd", "031"); 	
//		resultMap.put("pId", map.get("pId")); 
//		resultMap.put("totalAmt", "46,308"); 	
//		resultMap.put("departmentNm", "치주과"); 	
//		//resultMap.put("mainSubCd", ""); 	서버에서 넘어오는 값이 없어서 화면에 key 자체가 없게 넘어가는 값 
//		resultMap.put("receiptAmt", "0"); 	// 서버에서 , 가 넘어오기 때문에 그대로 넘겨줌 
//		resultMap.put("billReceiptNo", "1"); 	
//		resultMap.put("billNo", "10712"); 	
//		resultMap.put("insuranceAmt", "432"); 	
//		//resultMap.put("dischargeDt", "0"); 	서버에서 넘어오는 값이 없어서 화면에 key 자체가 없게 넘어가는 값 
//		resultMap.put("outstandingAmt", "10,000"); 	
//		resultMap.put("receiptDt", "20160120"); 	
//		//resultMap.put("admissionDt", ""); 	서버에서 넘어오는 값이 없어서 화면에 key 자체가 없게 넘어가는 값 	
//		list.add(resultMap); 		

		return ResponseUtil.wrapResultMap(list); 		
	}
	
	/**
	 * 검사결과 
	 * @param map
	 * @return
	 */
	public Map<String, Object> _totalexam_getExamList(Map<String, Object> map) { 
		if(this.logger.isDebugEnabled()) {
			this.logger.debug(FrameworkConstants.NEW_LINE + "검사결과 테스트 데이터 생성합니다.");
		}
		
		
		List<Map<String, Object>> list = new ArrayList<>(); 
		Map<String, Object> resultMap = null; 
		
		// 
		resultMap = new HashMap<>(); 
		resultMap.put("examResult", "143.0 mmol/L"); 
		resultMap.put("examNm", "Sodium (Serum)"); 
		resultMap.put("examGrpNm", "Sodium (Serum)"); 
		resultMap.put("referenceVal", "136 ~ 145 mmol/L"); 
		resultMap.put("date", DateUtil.convertYYYYMMDD(DateUtil.getEndDate(13))); 
		list.add(resultMap); 

		// 
		resultMap = new HashMap<>(); 
		resultMap.put("examResult", "4.2 mmolL"); 
		resultMap.put("examNm", "Potassium (Serum)"); 
		resultMap.put("examGrpNm", "Potassium (Serum)"); 
		resultMap.put("referenceVal", "3.5 ~ 5.1 mmolL"); 
		resultMap.put("date", DateUtil.convertYYYYMMDD(DateUtil.getEndDate(27))); 
		list.add(resultMap); 		
		
		return ResponseUtil.wrapResultMap(list); 
	}
	
	/**
	 * 예약가능한 진료과 
	 * @param map
	 * @return
	 */
	public Map<String, Object> _reservation_booking_getRevDept(Map<String, Object> map) { 
		if(this.logger.isDebugEnabled()) {
			this.logger.debug(FrameworkConstants.NEW_LINE + "검사결과 테스트 데이터 생성합니다.");
		}
		
		
		List<Map<String, Object>> list = new ArrayList<>(); 
		Map<String, Object> resultMap = null; 
		
		// 
		resultMap = new HashMap<String, Object>(); 
		resultMap.put("departmentCd", "2090000000"); 
		resultMap.put("departmentNm", "마취통증의학과"); 
		list.add(resultMap); 
		// 
		resultMap = new HashMap<String, Object>(); 
		resultMap.put("departmentCd", "2170000000"); 
		resultMap.put("departmentNm", "방사선종양학과"); 
		list.add(resultMap); 		
		// 
		resultMap = new HashMap<String, Object>(); 
		resultMap.put("departmentCd", "2150000000"); 
		resultMap.put("departmentNm", "비뇨기과"); 
		list.add(resultMap); 
		// 
		resultMap = new HashMap<String, Object>(); 
		resultMap.put("departmentCd", "2100000000"); 
		resultMap.put("departmentNm", "산부인과"); 
		list.add(resultMap); 
		
		return ResponseUtil.wrapResultMap(list); 
	}
	
	/**
	 * 진료과에 의사 
	 * @param map
	 * @return
	 */
	public Map<String, Object> _reservation_booking_getRevDoc(Map<String, Object> map) { 
		if(this.logger.isDebugEnabled()) {
			this.logger.debug(FrameworkConstants.NEW_LINE + "검사결과 테스트 데이터 생성합니다.");
		}
		
		
		List<Map<String, Object>> list = new ArrayList<>(); 
		Map<String, Object> resultMap = null; 
		
		// 
		resultMap = new HashMap<String, Object>(); 
		resultMap.put("doctorId", "01069"); 
		resultMap.put("doctorNm", "김명숙"); 
		resultMap.put("departmentCd", (String) map.get("departmentCd")); 
		list.add(resultMap); 
		// 
		resultMap = new HashMap<String, Object>(); 
		resultMap.put("doctorId", "01070"); 
		resultMap.put("doctorNm", "나영민"); 
		resultMap.put("departmentCd", (String) map.get("departmentCd")); 
		list.add(resultMap); 		
		// 
		resultMap = new HashMap<String, Object>(); 
		resultMap.put("doctorId", "01071"); 
		resultMap.put("doctorNm", "박헌수"); 
		resultMap.put("departmentCd", (String) map.get("departmentCd")); 
		list.add(resultMap); 
		
		return ResponseUtil.wrapResultMap(list); 
	}	
	
	/**
	 * 의사의 예약가능날짜 
	 * @param map
	 * @return
	 */
	public Map<String, Object> _reservation_booking_getRevDate(Map<String, Object> map) { 
		if(this.logger.isDebugEnabled()) {
			this.logger.debug(FrameworkConstants.NEW_LINE + "검사결과 테스트 데이터 생성합니다.");
		}
		
		
		List<Map<String, Object>> list = new ArrayList<>(); 
		Map<String, Object> resultMap = null; 
		
		// 
		resultMap = new HashMap<String, Object>(); 
		resultMap.put("dataDate", ((String) map.get("startYearMonth")) + "01"); 
		resultMap.put("weekNm", "금"); 
		list.add(resultMap); 
		// 
		resultMap = new HashMap<String, Object>(); 
		resultMap.put("dataDate", ((String) map.get("startYearMonth")) + "05"); 
		resultMap.put("weekNm", "화"); 
		list.add(resultMap); 		
		// 
		resultMap = new HashMap<String, Object>(); 
		resultMap.put("dataDate", ((String) map.get("startYearMonth")) + "08"); 
		resultMap.put("weekNm", "금"); 
		list.add(resultMap); 		
		// 
		resultMap = new HashMap<String, Object>(); 
		resultMap.put("dataDate", ((String) map.get("startYearMonth")) + "12"); 
		resultMap.put("weekNm", "화"); 
		list.add(resultMap); 		
		// 		
		resultMap = new HashMap<String, Object>(); 
		resultMap.put("dataDate", ((String) map.get("startYearMonth")) + "21"); 
		resultMap.put("weekNm", "목"); 
		list.add(resultMap); 		
		// 			
		resultMap = new HashMap<String, Object>(); 
		resultMap.put("dataDate", ((String) map.get("startYearMonth")) + "26"); 
		resultMap.put("weekNm", "화"); 
		list.add(resultMap); 		
		//
		
		return ResponseUtil.wrapResultMap(list); 
	}	
	
	/**
	 * 날짜에 시간 
	 * @param map
	 * @return
	 */
	public Map<String, Object> _reservation_booking_getRevTime(Map<String, Object> map) { 
		if(this.logger.isDebugEnabled()) {
			this.logger.debug(FrameworkConstants.NEW_LINE + "검사결과 테스트 데이터 생성합니다.");
		}
		
		
		List<Map<String, Object>> list = new ArrayList<>(); 
		Map<String, Object> resultMap = null; 
		
		// 
		resultMap = new HashMap<String, Object>(); 
		resultMap.put("dataTime", "1020"); 
		list.add(resultMap); 
		// 
		resultMap = new HashMap<String, Object>(); 
		resultMap.put("dataTime", "1140"); 
		list.add(resultMap); 		
		// 
		resultMap = new HashMap<String, Object>(); 
		resultMap.put("dataTime", "1420"); 
		list.add(resultMap); 
		// 
		resultMap = new HashMap<String, Object>(); 
		resultMap.put("dataTime", "1540"); 
		list.add(resultMap); 		
		
		
		return ResponseUtil.wrapResultMap(list); 
	} 
	
	/**
	 * 예약 
	 * @param map
	 * @return
	 */
	public Map<String, Object> _reservation_booking_reservation(Map<String, Object> map) { 
		if(this.logger.isDebugEnabled()) {
			this.logger.debug(FrameworkConstants.NEW_LINE + "검사결과 테스트 데이터 생성합니다.");
		}
		
		
		this.logger.debug("예약요청정보 : " + ConvertUtil.convertStringForDebug(map));
		
		
		return ResponseUtil.wrapEmptyResultMap(); 
	} 
}
