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

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

/**
 * 파라미터 맵핑 유틸 
 * @author DBS 
 *
 */
public class ParamMappingUtil {
	// private final static Logger logger = LoggerFactory.getLogger(ParamMappingUtil.class);
	
	/**
	 * 로그인
	 * @param map
	 * @return
	 */
//	public static Map<String, Object> _user_login_loginSubmit(Map<String, Object> map) { 
//		Map<String, Object> resultMap = map;
//		
//		// 부서 코드 정리
//		List<Map<String, Object>> deptArray = new ArrayList<Map<String, Object>>();
//		
//		String deptList = (String) resultMap.remove("deptList");
//		String deptCodeList = (String) resultMap.remove("deptCodeList");
//
//		String[] deptStrArray = deptList.split("\\|");
//		String[] deptCodeStrArray = deptCodeList.split("\\|");
//
//		if( deptStrArray.length == deptCodeStrArray.length ) {
//			for( int i = 0; i < deptStrArray.length; i++) {
//				Map<String, Object> dept = new HashMap<String, Object>();
//				dept.put("deptCode", deptCodeStrArray[i]);
//				dept.put("deptName", deptStrArray[i]);
//				deptArray.add(dept);
//			}
//		} else {
//			resultMap.put("deptList", deptList);
//		}
//		resultMap.put("deptList", deptArray);
//		
//		// 속성 코드 정리
//		String attrStr = (String) resultMap.get("attr");
//		resultMap.put("attr", convertAttr(attrStr.split("\\|")));
//				
//		return resultMap;
//	}
	
	
//	public static Map<String, Object> _patient_getExamList(Map<String, Object> map) {
//		String examKey = (String) map.get("examKey");
//		if( examKey.charAt(49) == 'Y' ) {
//			map.put("pacs", true);
//			map.put("accNo", examKey.substring(51, 61));
//		} else {
//			map.put("pacs", false);
//			map.put("accNo", "");
//		}
//		return map;
//	}
//	// 협진/의뢰
//	public static Map<String, Object> _consult_getConsultReqListPerDoctor(Map<String, Object> map) {
//		String consultType = (String) map.get("consultType");
//		if( consultType.equals("I") ) {
//			Object inDate = map.remove("treatDate");
//			map.put("inDate", inDate);
//		}
//		return map;
//	}
//	// 협진/회신 - 의사별 협진 회신리스트
//	public static Map<String, Object> _consult_getConsultResListPerDoctor(Map<String, Object> map) {
//		return _consult_getConsultReqListPerDoctor(map);
//	}
//	// 협진/과회신 - 과별 협진 회신리스트
//	public static Map<String, Object> _consult_getConsultResListPerDept(Map<String, Object> map) {
//		return _consult_getConsultReqListPerDoctor(map);
//	}

	/**
	 * 병원에서 내려주는 속성값을 MP에서 사용하는 속성ID로 변환
	 * @param attr
	 * @return
	 */
	private static String convertAttr(String[] attrList) {
		StringBuilder convertAttr = new StringBuilder();
		
		for( String attr : attrList ) {
			if(attr.length() != 3) {
				return attr;
			}
			attr = attr.toUpperCase();
			
			
			if(attr.charAt(0) == 'K') {
				convertAttr.append("korea");
			} else {
				convertAttr.append("usa");
			}
			convertAttr.append("/");
			
			if(attr.charAt(1) == 'D') {
				convertAttr.append("doctor");
				convertAttr.append("/");
				if( attr.charAt(2) == 'M'){
					convertAttr.append("main_doctor");
				} else {
					convertAttr.append("general_doctor");
				}
			} else if(attr.charAt(1) == 'N') {
				convertAttr.append("nurse");
				convertAttr.append("/");
				if( attr.charAt(2) == 'W'){
					convertAttr.append("ward_nurse");
				} else {
					convertAttr.append("out_nurse");
				}
			} else {
				convertAttr.append("general");
				convertAttr.append("/");
				if( attr.charAt(2) == 'A'){
					convertAttr.append("admin");
				} else {
					convertAttr.append("facility");
				}
			}
			convertAttr.append("|");
		}
		
		return convertAttr.toString();
	}
	
	/**
	 * 유효한 값만 복사하기 
	 * @param map
	 * @return
	 */
	private static Map<String, Object> convertCopy(Map<String, Object> map) { 
		if(map == null) { 
			return null; 
		}
		
		final Map<String, Object> resultMap = new HashMap<>(); 
		
		final Iterator<String> keyIter = map.keySet().iterator(); 
		String key = null; 
		Object value = null; 
		
		while(keyIter.hasNext()) {
			key = keyIter.next(); 
			value = map.get(key); 
			
			// 대부분의 값은 String으로 넘어옴 
			if(value instanceof String) { 
				resultMap.put(key, value); 
			}
			// SQL을 통해 count 값으로 추려진 정보들이 BigDecimal로 넘어옴 
			else if(value instanceof BigDecimal) {
				resultMap.put(key, value); 
			}
		}
		
		return resultMap; 
	}	
	
	/**
	 * 우리 프로그램과 병원간 API 파라미터를 맞추기 위함.
	 * 현재는 보정이 필요한 곳이 많지는 않아서 따로 분리한 상태임. 
	 * - userId --> userId 
	 * - pNm --> pName 
	 * 
	 * @param map
	 * @return
	 */
	private static Map<String, Object> convertCommonParameter(Map<String, Object> map) { 
		Object data = null;
		
		// userId --> userId로 변경 
		data = map.remove("userId"); 
		if(data != null) { 
			map.put("userId", data); 
		}
		
		// pNm --> pName으로 변경 
		data = map.remove("pNm"); 
		if(data != null) { 
			map.put("pName", data); 
		}
		
		return map; 		
	}
}
