package com.jasamedika.medifirst2000.service.impl;

import java.util.ArrayList;
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.DiagnosaConverter;
import com.jasamedika.medifirst2000.converter.PernahDirawatDetailConverter;
import com.jasamedika.medifirst2000.converter.RiwayatKesehatanConverter;
import com.jasamedika.medifirst2000.dao.AntrianPasienDiPeriksaDao;
import com.jasamedika.medifirst2000.dao.PasienDaftarDao;
import com.jasamedika.medifirst2000.dao.PernahDiPeriksaDetailDao;
import com.jasamedika.medifirst2000.dao.RiwayatKesehatanDao;
import com.jasamedika.medifirst2000.entities.AntrianPasienDiPeriksa;
import com.jasamedika.medifirst2000.entities.Diagnosa;
import com.jasamedika.medifirst2000.entities.PasienDaftar;
import com.jasamedika.medifirst2000.entities.PernahDirawatDetail;
import com.jasamedika.medifirst2000.entities.RiwayatKesehatan;
import com.jasamedika.medifirst2000.exception.ServiceVOException;
import com.jasamedika.medifirst2000.service.RiwayatKesehatanService;
import com.jasamedika.medifirst2000.util.CommonUtil;
import com.jasamedika.medifirst2000.vo.PernahDirawatDetailVO;
import com.jasamedika.medifirst2000.vo.RiwayatKesehatanVO;


/**
 * Implement class for PasienService
 * 
 * @author Roberto
 * @param <T>
 */
@Service("RiwayatKesehatanService")
public class RiwayatKesehatanServiceImpl implements RiwayatKesehatanService{
	
	@Autowired
	private RiwayatKesehatanConverter riwayatKesehatanConverter;
	
	@Autowired
	private RiwayatKesehatanDao riwayatKesehatanDao;
	
	@Autowired
	private PernahDirawatDetailConverter pernahDirawatDetailConverter;
	
	@Autowired
	private DiagnosaConverter diagnosaConverter;
	
	@Autowired
	private PasienDaftarDao pasienDaftarDao;

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

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

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

	@Override
	public RiwayatKesehatanVO findById(Integer key) throws JpaSystemException {
		return null;
	}

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

	@Override
	public Map<String, Object> findAllWithPageAndLimitAndSortByAndDirectionParameter(Integer page, Integer limit,
			String sort, String dir) {
		return null;
	}
	@Autowired
	private AntrianPasienDiPeriksaDao antrianPasienDiPeriksaDao;
	
	@Autowired
	private PernahDiPeriksaDetailDao pernahDiPeriksaDetailDao;
	@Override
	public Map<String, Object> saveRiwayatKesehatanService(RiwayatKesehatanVO vo) {
		List<PernahDirawatDetail> listPernahDirawatDetail = new ArrayList<PernahDirawatDetail>();
		RiwayatKesehatan riwayatKesehatan=new RiwayatKesehatan();
		riwayatKesehatan.setNoRec(vo.getNoRec());
		riwayatKesehatan=riwayatKesehatanConverter.transferVOToModel(vo, riwayatKesehatan);
		riwayatKesehatan.setTglInput(vo.getTglRegistrasi());
		riwayatKesehatan.getPernahDirawatDetail().clear();
		AntrianPasienDiPeriksa pasienDaftar = antrianPasienDiPeriksaDao.findByNoRec(vo.getPasienDaftar().getNoRec());
		for(PernahDirawatDetail pernahDirawatDetailVO:pernahDiPeriksaDetailDao.findByRiwayatPemeriksaan(vo.getNoRec())){
			pernahDiPeriksaDetailDao.delete(pernahDirawatDetailVO);
		}
		
		riwayatKesehatan.setPasien(pasienDaftar);
		for(PernahDirawatDetailVO pernahDirawatDetailVO:vo.getPernahDirawatDetail()){
			PernahDirawatDetail pernahDirawatDetail = pernahDirawatDetailConverter.transferVOToModel(pernahDirawatDetailVO, new PernahDirawatDetail());
			pernahDirawatDetail.setRiwayatKesehatan(riwayatKesehatan);
			pernahDirawatDetail.setNoRec(pernahDirawatDetailVO.getNoRec());
			pernahDirawatDetail.setDiagnosa(diagnosaConverter.transferVOToModel(pernahDirawatDetailVO.getDiagnosa(), new Diagnosa()));
			if(CommonUtil.isNotNullOrEmpty(pernahDirawatDetail.getRiwayatKesehatan())){
				riwayatKesehatan.getPernahDirawatDetail().add(pernahDirawatDetail);
			}
			pernahDirawatDetail.setRiwayatKesehatan(riwayatKesehatan);
		}
		RiwayatKesehatan model = riwayatKesehatanDao.save(riwayatKesehatan);
		Map<String, Object> result = new HashMap<String, Object>();
		if (CommonUtil.isNotNullOrEmpty(model)) {
			result.put("noRec", model.getNoRec());
		}
		return result;
		
	}
	
}
