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.stereotype.Service;

import com.jasamedika.medifirst2000.converter.BaseConverterImpl;
import com.jasamedika.medifirst2000.dao.PegawaiJadwalKerjaDokterdDao;
import com.jasamedika.medifirst2000.entities.Hari;
import com.jasamedika.medifirst2000.entities.Kamar;
import com.jasamedika.medifirst2000.entities.Pegawai;
import com.jasamedika.medifirst2000.entities.PegawaiJadwalKerjaDokterD;
import com.jasamedika.medifirst2000.entities.Ruangan;
import com.jasamedika.medifirst2000.entities.StatusAbsensi;
import com.jasamedika.medifirst2000.entities.StatusPegawaiJadwalKerja;
import com.jasamedika.medifirst2000.service.PegawaiJadwalKerjaDokterdService;
import com.jasamedika.medifirst2000.util.CommonUtil;
import com.jasamedika.medifirst2000.vo.HariVO;
import com.jasamedika.medifirst2000.vo.KamarVO;
import com.jasamedika.medifirst2000.vo.PegawaiJadwalKerjaDokterDVO;
import com.jasamedika.medifirst2000.vo.PegawaiVO;
import com.jasamedika.medifirst2000.vo.RuanganVO;
import com.jasamedika.medifirst2000.vo.StatusAbsensiVO;
import com.jasamedika.medifirst2000.vo.StatusPegawaiJadwalKerjaVO;

@Service("PegawaiJadwalKerjaDokterdService")
public class PegawaiJadwalKerjaDokterdServiceImpl implements PegawaiJadwalKerjaDokterdService{
	
	@Autowired
	private PegawaiJadwalKerjaDokterdDao pegawaiJadwalKerjaDokterdDao;
	
	@Autowired
	private BaseConverterImpl<PegawaiJadwalKerjaDokterDVO, PegawaiJadwalKerjaDokterD> pegawaiJadwalKerjaDokterdConverter;
	
	@Autowired
	private BaseConverterImpl<HariVO, Hari> hariConverter;
	
	@Autowired
	private BaseConverterImpl<KamarVO, Kamar> kamarConverter;
	
	@Autowired
	private BaseConverterImpl<PegawaiVO, Pegawai> pegawaiConverter;
	
	@Autowired
	private BaseConverterImpl<RuanganVO, Ruangan> ruanganConverter;
	
	@Autowired
	private BaseConverterImpl<StatusPegawaiJadwalKerjaVO, StatusPegawaiJadwalKerja> statusPegawaiJadwalKerjaConverter;
	
	@Autowired
	private BaseConverterImpl<StatusAbsensiVO, StatusAbsensi> statusAbsensiConverter;
	
	
	@Override
	public Map<String, Object> loadDataJadwal() {
		Map<String, Object> result = new HashMap<>();

		List<Map<String, Object>> listHari = pegawaiJadwalKerjaDokterdDao.getHari();
		if(CommonUtil.isNotNullOrEmpty(listHari)){
			result.put("listHari", listHari);
		}
		List<Map<String, Object>> listPegawai = pegawaiJadwalKerjaDokterdDao.getPegawai();
		if(CommonUtil.isNotNullOrEmpty(listPegawai)){
			result.put("listPegawai", listPegawai);
		}
		List<Map<String, Object>> listRuangan = pegawaiJadwalKerjaDokterdDao.getRuangan();
		if(CommonUtil.isNotNullOrEmpty(listRuangan)){
			result.put("listRuangan", listRuangan);
		}
		List<Map<String, Object>> listStatusJadwal = pegawaiJadwalKerjaDokterdDao.getStatusJadwal();
		if(CommonUtil.isNotNullOrEmpty(listStatusJadwal)){
			result.put("listStatusJadwal", listStatusJadwal);
		}
		List<Map<String, Object>> listStatusAbsensi = pegawaiJadwalKerjaDokterdDao.getStatusAbsensi();
		if(CommonUtil.isNotNullOrEmpty(listStatusAbsensi)){
			result.put("listStatusAbsensi", listStatusAbsensi);
		}
		return result;
	}
	
	@Override
	public Map<String, Object> getKamarByRuangan(Integer id){
		Map<String, Object> result = new HashMap<>();
		List<Map<String, Object>> listKamar = pegawaiJadwalKerjaDokterdDao.getKamar(id);
		if(CommonUtil.isNotNullOrEmpty(listKamar)){
			result.put("listKamar", listKamar);
		}
		return result;
	}
	
	@Override
	public Map<String, Object> saveJadwalKerjaDokter(PegawaiJadwalKerjaDokterDVO vo){
		Map<String, Object> result = new HashMap<>();
		PegawaiJadwalKerjaDokterD pegawaiJadwalKerjaDokterD = pegawaiJadwalKerjaDokterdConverter.transferVOToModel(vo, new PegawaiJadwalKerjaDokterD());

		if(CommonUtil.isNotNullOrEmpty(vo.getHari())){
			pegawaiJadwalKerjaDokterD.setHari(hariConverter.transferVOToModel(vo.getHari(), new Hari()));
		}
		if(CommonUtil.isNotNullOrEmpty(vo.getKamar())){
			pegawaiJadwalKerjaDokterD.setKamar(kamarConverter.transferVOToModel(vo.getKamar(), new Kamar()));
		}
		if(CommonUtil.isNotNullOrEmpty(vo.getPegawai())){
			pegawaiJadwalKerjaDokterD.setPegawai(pegawaiConverter.transferVOToModel(vo.getPegawai(), new Pegawai()));
		}
		if(CommonUtil.isNotNullOrEmpty(vo.getPegawaiGanti())){
			pegawaiJadwalKerjaDokterD.setPegawaiGanti(pegawaiConverter.transferVOToModel(vo.getPegawaiGanti(), new Pegawai()));
		}
		if(CommonUtil.isNotNullOrEmpty(vo.getRuangan())){
			pegawaiJadwalKerjaDokterD.setRuangan(ruanganConverter.transferVOToModel(vo.getRuangan(), new Ruangan()));
		}
		if(CommonUtil.isNotNullOrEmpty(vo.getStatusPegawaiJadwalKerja())){
			pegawaiJadwalKerjaDokterD.setStatusPegawaiJadwalKerja(statusPegawaiJadwalKerjaConverter.transferVOToModel(vo.getStatusPegawaiJadwalKerja(), new StatusPegawaiJadwalKerja()));
		}
		if(CommonUtil.isNotNullOrEmpty(vo.getStatusAbsensi())){
			pegawaiJadwalKerjaDokterD.setStatusAbsensi(statusAbsensiConverter.transferVOToModel(vo.getStatusAbsensi(), new StatusAbsensi()));
		}
		if(CommonUtil.isNotNullOrEmpty(pegawaiJadwalKerjaDokterD)){
			PegawaiJadwalKerjaDokterD pegawaiJadwalKerjaDokterDResult = pegawaiJadwalKerjaDokterdDao.save(pegawaiJadwalKerjaDokterD);
			result.put("id", pegawaiJadwalKerjaDokterDResult.getId());
		}
		return result;
	}
	
	@Override
	public Map<String, Object> updateJadwalKerjaDokter(PegawaiJadwalKerjaDokterDVO vo){
		Map<String, Object> result = new HashMap<>();
		PegawaiJadwalKerjaDokterD pegawaiJadwalKerjaDokterD = pegawaiJadwalKerjaDokterdConverter.transferVOToModel(vo, new PegawaiJadwalKerjaDokterD());
		if(CommonUtil.isNotNullOrEmpty(pegawaiJadwalKerjaDokterD)){
			pegawaiJadwalKerjaDokterdDao.save(pegawaiJadwalKerjaDokterD);
		}
		return result;
	}
	
	@Override
	public Map<String, Object> deleteJadwalKerjaDokter(Integer id){
		Map<String, Object> result = new HashMap<>();
		PegawaiJadwalKerjaDokterD pegawaiJadwalKerjaDokterD = pegawaiJadwalKerjaDokterdDao.findOne(id);
		if(CommonUtil.isNotNullOrEmpty(pegawaiJadwalKerjaDokterD)){
			pegawaiJadwalKerjaDokterdDao.delete(pegawaiJadwalKerjaDokterD);
			result.put("deleted", id);
		}
		return result;
	}

}