package com.dbs.mplus.controller.mobile;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.dbs.mplus.exception.mobile.ApiCallException;
import com.dbs.mplus.exception.mobile.MobileControllerException;
import com.dbs.mplus.framework.exception.MPlusServiceException;
import com.dbs.mplus.framework.template.AbstractController;
import com.dbs.mplus.framework.util.ResponseUtil;
import com.dbs.mplus.service.api.MPlusApi;
import com.dbs.mplus.service.api.MPlusApiCallService;

/**
 * 병원 일반 정보 조회 controller
 * @author siyoung.ahn
 *
 */
@Controller
@RequestMapping("/mobile/hospital")
public class HospitalController extends AbstractController{
	private final Logger logger = LoggerFactory.getLogger(this.getClass());

	@Autowired
	private MPlusApiCallService apiCallService; 	
	
	/**
	 * 부서리스트 조회
	 * @param request
	 * @param response
	 * @param reqMap
	 */
	@RequestMapping(value = "/getDeptList.json", method = RequestMethod.POST)
	public Map<String, Object> getDeptList(HttpServletRequest request, HttpServletResponse response,
			@RequestBody Map<String, Object> reqMap) throws MobileControllerException { 
		// 접근권한 및 파라미터 정리 
		try { 
			reqMap = super.isAccessableMenu(this.getClass(), request, reqMap); 
		}
		catch(MPlusServiceException ex) { 
			throw new MobileControllerException(ex.getCode(), ex.getMessage()); 
		} 
		
		// 실행 
		try { 
			return ResponseUtil.wrapResultMap( this.apiCallService.execute(MPlusApi.HOSPITAL_GETDEPTLIST, reqMap) ); 
		}
		catch(ApiCallException ex) { 
			if(this.logger.isDebugEnabled()) {
				this.logger.debug("예외발생", ex); 
			}
			
			throw new MobileControllerException("mplus.error.if.system", "시스템 호출 오류가 발생했습니다 (IF)");
		}
	}
	
	/**
	 * 의사리스트 조회
	 * @param request
	 * @param response
	 * @param reqMap
	 */
	@RequestMapping(value = "/getDoctorList.json", method = RequestMethod.POST)
	public Map<String, Object> getDoctorList(HttpServletRequest request, HttpServletResponse response,
			@RequestBody Map<String, Object> reqMap) throws MobileControllerException { 
		// 접근권한 및 파라미터 정리 
		try { 
			reqMap = super.isAccessableMenu(this.getClass(), request, reqMap); 
		}
		catch(MPlusServiceException ex) { 
			throw new MobileControllerException(ex.getCode(), ex.getMessage()); 
		} 
		
		// 실행 
		try { 
			return ResponseUtil.wrapResultMap( this.apiCallService.execute(MPlusApi.HOSPITAL_GETDOCTORLIST, reqMap) ); 
		}
		catch(ApiCallException ex) { 
			if(this.logger.isDebugEnabled()) {
				this.logger.debug("예외발생", ex); 
			}
			
			throw new MobileControllerException("mplus.error.if.system", "시스템 호출 오류가 발생했습니다 (IF)");
		}
	}
	
	/**
	 * 환자정보 조회
	 * @param request
	 * @param response
	 * @param reqMap
	 */
	@RequestMapping(value = "/getPatientInfo.json", method = RequestMethod.POST)
	public Map<String, Object> getPatientInfo(HttpServletRequest request, HttpServletResponse response,
			@RequestBody Map<String, Object> reqMap) throws MobileControllerException { 
		// 접근권한 및 파라미터 정리 
		try { 
			reqMap = super.isAccessableMenu(this.getClass(), request, reqMap); 
		}
		catch(MPlusServiceException ex) { 
			throw new MobileControllerException(ex.getCode(), ex.getMessage()); 
		} 
		
		// 실행 
		try { 
			return ResponseUtil.wrapResultMap( this.apiCallService.execute(MPlusApi.HOSPITAL_GETPATIENTINFO, reqMap) ); 
		}
		catch(ApiCallException ex) { 
			if(this.logger.isDebugEnabled()) {
				this.logger.debug("예외발생", ex); 
			}
			
			throw new MobileControllerException("mplus.error.if.system", "시스템 호출 오류가 발생했습니다 (IF)");
		}
	}
	
	/**
	 * 병동 리스트 조회
	 * @param request
	 * @param response
	 * @param reqMap
	 */
	@RequestMapping(value = "/getWardList.json", method = RequestMethod.POST)
	public Map<String, Object> getWardList(HttpServletRequest request, HttpServletResponse response,
			@RequestBody Map<String, Object> reqMap) throws MobileControllerException { 
		// 접근권한 및 파라미터 정리 
		try { 
			reqMap = super.isAccessableMenu(this.getClass(), request, reqMap); 
		}
		catch(MPlusServiceException ex) { 
			throw new MobileControllerException(ex.getCode(), ex.getMessage()); 
		} 
		
		// 실행 
		try { 
			return ResponseUtil.wrapResultMap( this.apiCallService.execute(MPlusApi.HOSPITAL_GETWARDLIST, reqMap) ); 
		}
		catch(ApiCallException ex) { 
			if(this.logger.isDebugEnabled()) {
				this.logger.debug("예외발생", ex); 
			}
			
			throw new MobileControllerException("mplus.error.if.system", "시스템 호출 오류가 발생했습니다 (IF)");
		}
	}
	
	/**
	 * 의사 서멍 이미지 정보 조회
	 * @param request
	 * @param response
	 * @param reqMap
	 */
	@RequestMapping(value = "/getSignImage.json", method = RequestMethod.POST)
	public Map<String, Object> getSignImage(HttpServletRequest request, HttpServletResponse response,
			@RequestBody Map<String, Object> reqMap) throws MobileControllerException { 
		// 접근권한 및 파라미터 정리 
		try { 
			reqMap = super.isAccessableMenu(this.getClass(), request, reqMap); 
		}
		catch(MPlusServiceException ex) { 
			throw new MobileControllerException(ex.getCode(), ex.getMessage()); 
		} 
		
		// 실행 
		try { 
			return ResponseUtil.wrapResultMap( this.apiCallService.execute(MPlusApi.HOSPITAL_GETSIGNIMAGE, reqMap) ); 
		}
		catch(ApiCallException ex) { 
			if(this.logger.isDebugEnabled()) {
				this.logger.debug("예외발생", ex); 
			}
			
			throw new MobileControllerException("mplus.error.if.system", "시스템 호출 오류가 발생했습니다 (IF)");
		}
	}
}
