package com.jasamedika.medifirst2000.service.impl;

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

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.jpa.JpaSystemException;
import org.springframework.stereotype.Service;

import com.jasamedika.medifirst2000.converter.BaseConverterImpl;
import com.jasamedika.medifirst2000.converter.KebutuhanDasarConverter;
import com.jasamedika.medifirst2000.dao.AntrianPasienDiPeriksaDao;
import com.jasamedika.medifirst2000.dao.KebutuhanDasarDao;
import com.jasamedika.medifirst2000.entities.AntrianPasienDiPeriksa;
import com.jasamedika.medifirst2000.entities.KebutuhanDasar;
import com.jasamedika.medifirst2000.entities.PengkajianAwalBaru;
import com.jasamedika.medifirst2000.exception.ServiceVOException;
import com.jasamedika.medifirst2000.service.KebutuhanDasarService;
import com.jasamedika.medifirst2000.util.CommonUtil;
import com.jasamedika.medifirst2000.util.JsonUtil;
import com.jasamedika.medifirst2000.vo.AntrianPasienDiPeriksaVO;
import com.jasamedika.medifirst2000.vo.KebutuhanDasarVO;
import com.jasamedika.medifirst2000.vo.OksigenasiPolaNafasVO;
import com.jasamedika.medifirst2000.vo.PengkajianAwalBaruVO;


@Service("KebutuhanDasarService")
public class KebutuhanDasarServiceImpl implements KebutuhanDasarService<KebutuhanDasarVO> {
	
	@Autowired
	private KebutuhanDasarDao kebutuhanDasarDao;
	
	@Autowired
	private KebutuhanDasarConverter kebutuhanDasarConverter;
	
	@Autowired
	private BaseConverterImpl<PengkajianAwalBaruVO, PengkajianAwalBaru> pengkajianAwalBaruConverter;

	@Override
	public Map<String,Object> addKebutuhanDasar(KebutuhanDasarVO vo) {
		Map<String,Object> result=new HashMap<String,Object>();
		KebutuhanDasar model=kebutuhanDasarConverter.transferVOToModel(vo, new KebutuhanDasar());

		if(CommonUtil.isNotNullOrEmpty(vo.getPengkajianAwalBaru())){
			model.setPengkajianAwalBaru(pengkajianAwalBaruConverter.transferVOToModel(vo.getPengkajianAwalBaru(), new PengkajianAwalBaru()));
		}
		
		if(model.getPolaNafas().getId()!=1 || model.getBatuk().getId()!=1 || model.getSianosis().getId()!=1)
			model.setIsNormalOksigenasi(false);
		else
			model.setIsNormalOksigenasi(true);
		
		if(model.getNadi().getId()!=1 || model.getUbunUbun().getId()!=1 || model.getTurgorKulit().getId()!=1
				|| model.getCrt().getId()!=1 || model.getEdema().getId()!=1 || model.getAkral().getId()!=1)
			model.setIsNormalKebutuhanCairan(false);
		else
			model.setIsNormalKebutuhanCairan(true);
		
		if(model.getKomponen().getId()!=1 || model.getKejang().getId()!=1 )
			model.setIsNormalNeurologi(false);
		else
			model.setIsNormalNeurologi(true);
		
		if(model.getMukosa().getId()!=1 || model.getStomatitis().getId()!=1 || model.getMuntah().getId()!=1
				|| model.getMual().getId()!=1)
			model.setIsNormalKebutuhanNutrisi(false);
		else
			model.setIsNormalKebutuhanNutrisi(true);
		
		if(model.getAnus().getId()!=1 || model.getBab().getId()!=1 || model.getFeses().getId()!=1)
			model.setIsNormalDefeaksi(false);
		else
			model.setIsNormalDefeaksi(true);
		
		if(model.getBak().getId()!=1 || model.getAlatGenitalia().getId()!=1)
			model.setIsNormalUrin(false);
		else
			model.setIsNormalUrin(true);
		
		if(model.getWarna().getId()!=1 || model.getKelainanKulit().getId()!=1 || model.getKulit().getId()!=1)
			model.setIsNormalIntegumen(false);
		else
			model.setIsNormalIntegumen(true);
		
		if(model.getAktif().getId()!=1 || model.getLelah().getId()!=1 )
			model.setIsNormalAktifitasAnak(false);
		else
			model.setIsNormalAktifitasAnak(true);
		
		if(model.getPenglihatan().getId()!=1 || model.getPendengaran().getId()!=1 || model.getDayaIngat().getId()!=1)
			model.setIsNormalPersepsiKognisi(false);
		else
			model.setIsNormalPersepsiKognisi(true);
		
		if(model.getLamaTidur().getId()!=1)
			model.setIsNormalTidurIstirahat(false);
		else
			model.setIsNormalTidurIstirahat(true);
		
		if(model.getGambaran().getId()!=1)
			model.setIsNormalKonsepDiri(false);
		else
			model.setIsNormalKonsepDiri(true);
		
		if(model.getMasalah().getId()!=1 || model.getPengaruhPenyakit().getId()!=1)
			model.setIsNormalPeranHubungan(false);
		else
			model.setIsNormalPeranHubungan(true);
		
		if(model.getKoping().getId()!=1 )
			model.setIsNormalKoping(false);
		else
			model.setIsNormalKoping(true);
		
		if(model.getPertolongan().getId()!=1 || model.getHarapan().getId()!=1)
			model.setIsNormalNilaiNilai(false);
		else
			model.setIsNormalNilaiNilai(true);
		
		if(model.getSehat().getId()!=1 || model.getPenyakit().getId()!=1 || model.getKegiatan().getId()!=1)
			model.setIsNormalPersepsiPasien(false);
		else
			model.setIsNormalPersepsiPasien(true);

		KebutuhanDasar resultModel=kebutuhanDasarDao.save(model);
		try {
			result.put("kebutuhanDasar",JsonUtil.ToMap(resultModel));
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		}
		return result;
	}
	
	@Override
	public Map<String, Object> findKebutuhanDasarByNoRec(String noRec) {
		Map<String,Object> result=new HashMap<String,Object>();
		List<KebutuhanDasar> list=kebutuhanDasarDao.findKebutuhanDasarByNoRec(noRec);
		if(list.isEmpty()){
			result.put("dataFound", false);
		}else{
			result.put("dataFound", true);
			try {
				result.put("kebutuhanDasar", JsonUtil.ToMapObject(list.get(0)));
			} catch (IllegalArgumentException e) {
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			}
		}
		return result;
	}

	@Override
	public KebutuhanDasarVO add(KebutuhanDasarVO vo) throws JpaSystemException, ServiceVOException {
		return null;
	}

	@Override
	public KebutuhanDasarVO update(KebutuhanDasarVO vo) throws JpaSystemException, ServiceVOException {
		return null;
	}

	@Override
	public Boolean delete(String key) throws JpaSystemException {
		return null;
	}

	@Override
	public KebutuhanDasarVO findById(String key) throws JpaSystemException {
		return null;
	}

	@Override
	public List<KebutuhanDasarVO> findAll() throws JpaSystemException {
		return null;
	}

	@Override
	public Map<String, Object> findAllWithPageAndLimitAndSortByAndDirectionParameter(Integer page, Integer limit,
			String sort, String dir) {
		return null;
	}	
}
