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.AsalRujukanConverter;
import com.jasamedika.medifirst2000.converter.KamarConverter;
import com.jasamedika.medifirst2000.converter.KelompokPasienConverter;
import com.jasamedika.medifirst2000.converter.PasienConverter;
import com.jasamedika.medifirst2000.converter.PegawaiConverter;
import com.jasamedika.medifirst2000.converter.RuanganConverter;
import com.jasamedika.medifirst2000.dao.PasienDaftarDao;
import com.jasamedika.medifirst2000.entities.AntrianPasienDiPeriksa;
import com.jasamedika.medifirst2000.entities.AsalRujukan;
import com.jasamedika.medifirst2000.entities.Kamar;
import com.jasamedika.medifirst2000.entities.KelompokPasien;
import com.jasamedika.medifirst2000.entities.Pasien;
import com.jasamedika.medifirst2000.entities.PasienDaftar;
import com.jasamedika.medifirst2000.entities.Pegawai;
import com.jasamedika.medifirst2000.entities.Ruangan;
import com.jasamedika.medifirst2000.exception.ServiceVOException;
import com.jasamedika.medifirst2000.service.RegistrasiPelayananRawatInapService;
import com.jasamedika.medifirst2000.util.CommonUtil;
import com.jasamedika.medifirst2000.vo.RegistrasiPelayananRawatInapVO;

/**
 * Implement class for RegistrasiPasienService
 * 
 * @author Askur
 * @param <T>
 */
@Service("registrasiPelayananRawatInapService")
public class RegistrasiPelayananRawatInapServiceImpl extends BaseVoServiceImpl implements RegistrasiPelayananRawatInapService<RegistrasiPelayananRawatInapVO> {


	@Autowired
	private PasienDaftarDao pasienDaftarDao;
	
	@Autowired
	private PasienConverter pasienConverter;
	
	@Autowired
	private AsalRujukanConverter asalRujukanConverter;
	
	@Autowired
	private RuanganConverter ruanganConverter;
	
	@Autowired
	private PegawaiConverter pegawaiConverter;
	
	@Autowired
	private KelompokPasienConverter kelompokPasienConverter;
	
	@Autowired
	private KamarConverter kamarConverter;

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

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

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

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

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


	@Override
	public Map<String, Object> saveRegistrasiPelayananRawatInapRawatInap(RegistrasiPelayananRawatInapVO vo) {


		PasienDaftar pasienDaftar = new PasienDaftar();
		if (CommonUtil.isNotNullOrEmpty(vo.getRuangan())) {
			pasienDaftar.setRuangan(ruanganConverter.transferVOToModel(vo.getRuangan(), new Ruangan()));
		}
		if (CommonUtil.isNotNullOrEmpty(vo.getPasien())) {
			pasienDaftar.setPasien(pasienConverter.transferVOToModel(vo.getPasien(), new Pasien()));
		}
		if (CommonUtil.isNotNullOrEmpty(vo.getKelompokPasien())) {
			pasienDaftar.setKelompokPasien(kelompokPasienConverter.transferVOToModel(vo.getKelompokPasien(), new KelompokPasien()));
		}
		pasienDaftar.setIsOnSiteService(vo.getIsOnSiteService());
		pasienDaftar.setTglRegistrasi(vo.getTglRegistrasi());
		pasienDaftar.setIsRegistrasiLengkap((byte) 0);

		AntrianPasienDiPeriksa antrianPasienDiPeriksa = new AntrianPasienDiPeriksa();
		if (CommonUtil.isNotNullOrEmpty(vo.getRuangan())) {
			antrianPasienDiPeriksa.setRuangan(ruanganConverter.transferVOToModel(vo.getRuangan(), new Ruangan()));
		}
	
		if (CommonUtil.isNotNullOrEmpty(vo.getAsalRujukan())) {
			antrianPasienDiPeriksa.setAsalRujukan(asalRujukanConverter.transferVOToModel(vo.getAsalRujukan(), new AsalRujukan()));
		}
		if (CommonUtil.isNotNullOrEmpty(vo.getPegawai())) {
			antrianPasienDiPeriksa.setPegawai(pegawaiConverter.transferVOToModel(vo.getPegawai(), new Pegawai()));
		}
		if (CommonUtil.isNotNullOrEmpty(vo.getRuangan())) {
			antrianPasienDiPeriksa.setRuangan(ruanganConverter.transferVOToModel(vo.getRuangan(), new Ruangan()));
		}
		if(CommonUtil.isNotNullOrEmpty(vo.getKamar())){
			antrianPasienDiPeriksa.setKamar(kamarConverter.transferVOToModel(vo.getKamar(), new Kamar()));
		}
		
		antrianPasienDiPeriksa.setTglRegistrasi(vo.getTglRegistrasi());
		antrianPasienDiPeriksa.setStatusPasien((byte) 1);
		antrianPasienDiPeriksa.setPasienDaftar(pasienDaftar);
		antrianPasienDiPeriksa.setNoBed(vo.getNoBed());
		pasienDaftar.getAntrianPasienDiPeriksaSet().add(antrianPasienDiPeriksa);

		PasienDaftar model=pasienDaftarDao.save(pasienDaftar);
		
		Map<String,Object>result=new HashMap<String,Object>();
		if(CommonUtil.isNotNullOrEmpty(model.getPasienId())){
			result.put("noCM",model.getPasien().getNoCm());
			result.put("noRegistrasi",model.getNoRegistrasi());
		}
		return result;

	
	}

	

}
