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

import com.jasamedika.medifirst2000.converter.BaseConverterImpl;
import com.jasamedika.medifirst2000.converter.PraAnestesiDokterBedahConverter;
import com.jasamedika.medifirst2000.converter.PraAnestesiDokterBedahHeaderConverter;
import com.jasamedika.medifirst2000.dao.AntrianPasienDiPeriksaDao;
import com.jasamedika.medifirst2000.dao.PraAnestesiDokterBedahDao;
import com.jasamedika.medifirst2000.dao.PraAnestesiDokterBedahHeaderDao;
import com.jasamedika.medifirst2000.entities.AntrianPasienDiPeriksa;
import com.jasamedika.medifirst2000.entities.Pasien;
import com.jasamedika.medifirst2000.entities.Pegawai;
import com.jasamedika.medifirst2000.entities.PraAnestesi;
import com.jasamedika.medifirst2000.entities.PraAnestesiDokterBedah;
import com.jasamedika.medifirst2000.entities.PraAnestesiDokterBedahHeader;
import com.jasamedika.medifirst2000.entities.PraAnestesiPasienBedah;
import com.jasamedika.medifirst2000.entities.PraAnestesiPasienHeader;
import com.jasamedika.medifirst2000.entities.Ruangan;
import com.jasamedika.medifirst2000.service.PraAnestesiDokterBedahService;
import com.jasamedika.medifirst2000.util.CommonUtil;
import com.jasamedika.medifirst2000.vo.PegawaiVO;
import com.jasamedika.medifirst2000.vo.PraAnestesiDokterBedahHeaderVO;
import com.jasamedika.medifirst2000.vo.PraAnestesiDokterBedahVO;
import com.jasamedika.medifirst2000.vo.PraAnestesiPasienBedahVO;
import com.jasamedika.medifirst2000.vo.PraAnestesiVO;
import com.jasamedika.medifirst2000.vo.RuanganVO;

@Service("PraAnestesiDokterBedahService")
public class PraAnestesiDokterBedahServiceImpl implements PraAnestesiDokterBedahService {
	@Autowired
	private PraAnestesiDokterBedahDao praAnestesiDokterBedahDao;
	
	@Autowired
	private PraAnestesiDokterBedahHeaderDao praAnestesiDokterBedahHeaderDao;
	
	@Autowired
	private BaseConverterImpl<PraAnestesiVO, PraAnestesi> praAnestesiConverter;
	
	@Autowired
	private AntrianPasienDiPeriksaDao antrianPasienDiPeriksaDao;
	
	@Autowired
	private BaseConverterImpl<PegawaiVO, Pegawai> pegawaiConverter;
	
	@Autowired
	private BaseConverterImpl<RuanganVO, Ruangan> ruanganConverter;
	
	@Autowired
	private PraAnestesiDokterBedahHeaderConverter praAnestesiDokterBedahHeaderConverter;
	
	@Autowired
	private PraAnestesiDokterBedahConverter praAnestesiDokterBedahConverter;

	@Override
	public Map<String, Object> savePraAnestesiDokterBedah(List<PraAnestesiDokterBedahVO> vos) {
		Map<String, Object> result = new HashMap<String, Object>();
		
		List<PraAnestesiDokterBedah> listResult = new ArrayList<PraAnestesiDokterBedah>();
		
		if(CommonUtil.isNotNullOrEmpty(vos)) {
			for (PraAnestesiDokterBedahVO vo : vos) {
				
				PraAnestesiDokterBedah praAnestesiDokterBedah = new PraAnestesiDokterBedah();
				praAnestesiDokterBedah.setPraAnestesiDokter(praAnestesiConverter.transferVOToModel(vo.getPraAnestesiDokter(), new PraAnestesi()));
				praAnestesiDokterBedah.setKeterangan(vo.getKeterangan());
				praAnestesiDokterBedah.setKetTambahan(vo.getKetTambahan());
				praAnestesiDokterBedah.setYesNo(vo.getYesNo());
				praAnestesiDokterBedah.setStatusEnabled(vo.getStatusEnabled());
		
				PraAnestesiDokterBedah resultModel = this.praAnestesiDokterBedahDao.save(praAnestesiDokterBedah);
				
				listResult.add(resultModel);
			}
		}
		
		if (CommonUtil.isNotNullOrEmpty(listResult)) {
			result.put("model", "Success savePraAnestesiPasienBedah");
		}
		
		return result;
		
	}

	@Override
	public Map<String, Object> savePraAnestesiDokter(PraAnestesiDokterBedahHeaderVO vo) {
		PraAnestesiDokterBedahHeader praAnestesiDokterBedahHeader = new PraAnestesiDokterBedahHeader();
		praAnestesiDokterBedahHeader = praAnestesiDokterBedahHeaderConverter.transferVOToModel(vo, praAnestesiDokterBedahHeader);
		
		AntrianPasienDiPeriksa norec = antrianPasienDiPeriksaDao.findByNoRec(vo.getPasienDaftar().getNoRec());
		praAnestesiDokterBedahHeader.setPasienDaftar(norec);	
		praAnestesiDokterBedahHeader.setNoRec(vo.getNoRec());
		
		praAnestesiDokterBedahHeader.getPraAnestesiDokterBedah().clear();
		for (PraAnestesiDokterBedahVO praAnestesiDokterBedahVO:vo.getPraAnestesiDokterBedah()){
			PraAnestesiDokterBedah praAnestesiDokterBedah = praAnestesiDokterBedahConverter.transferVOToModel(praAnestesiDokterBedahVO, new PraAnestesiDokterBedah());
			praAnestesiDokterBedah.setPraAnestesiDokterBedahHeader(praAnestesiDokterBedahHeader);
			praAnestesiDokterBedah.setNoRec(praAnestesiDokterBedahVO.getNoRec());
			praAnestesiDokterBedah.setKeterangan(praAnestesiDokterBedahVO.getKeterangan());
			praAnestesiDokterBedah.setStatusEnabled(praAnestesiDokterBedahVO.getStatusEnabled());
			praAnestesiDokterBedah.setKetTambahan(praAnestesiDokterBedahVO.getKetTambahan());
			praAnestesiDokterBedah.setPraAnestesiDokter(praAnestesiConverter.transferVOToModel(praAnestesiDokterBedahVO.getPraAnestesiDokter(), new PraAnestesi()));
			
			if(CommonUtil.isNotNullOrEmpty(praAnestesiDokterBedah.getPraAnestesiDokterBedahHeader())){
				praAnestesiDokterBedahHeader.getPraAnestesiDokterBedah().add(praAnestesiDokterBedah);
			}
			
		}
			
		PraAnestesiDokterBedahHeader model = praAnestesiDokterBedahHeaderDao.save(praAnestesiDokterBedahHeader);
		Map<String, Object> result = new HashMap<String, Object>();
		if (CommonUtil.isNotNullOrEmpty(model)) {
			result.put("noRec", model.getNoRec());
		}
		return result;
		

	}

	@Override
	public Map<String, Object> getPraAnestesiDokterByNoRec(String noRec) {
		Map<String, Object> result = new HashMap<String, Object>();
		List<Map<String, Object>> listData = new ArrayList<>();

		Map<String, Object> praAnestesiDokterMap = new HashMap<>();
		List<Map<String, Object>> praAnestesiDokter = this.praAnestesiDokterBedahHeaderDao.getPraAnestesiDokterByNoRec(noRec);
		
		//Detail
		try {
			
			Map<String, Object> detailMap = new HashMap<>();
			List<Map<String, Object>> tempList = new ArrayList<>();
			List<Map<String, Object>> detailList = this.praAnestesiDokterBedahHeaderDao.getPraAnestesiDokterDetail(noRec);
			
			for(Map<String, Object> data : detailList){
				Map<String, Object> tempMap = new HashMap<>();
				tempMap.put("noRec", (String) data.get("noRec"));
				tempMap.put("id", (Integer) data.get("id"));
				tempMap.put("reportDisplay", (String) data.get("reportDisplay"));
				tempMap.put("keterangan", (String) data.get("keterangan"));
				tempMap.put("ketTambahan", (String) data.get("ketTambahan"));
				tempMap.put("yesNo", (Integer) data.get("yesNo"));
				tempMap.put("statusEnabled", (Boolean) data.get("statusEnabled"));
				tempList.add(tempMap);
			}
			
			detailMap.put("Detail", tempList);
			listData.add(detailMap);
			
		} catch (Exception e) {
			e.printStackTrace();
		}
				
		praAnestesiDokterMap.put("PraAnestesiDokter", praAnestesiDokter);
		listData.add(praAnestesiDokterMap);
		result.put("showData", listData);
		
		return result;

	}

	@Override
	public Map<String, Object> getPraAnestesiDokterByNoRecAntrian(String noRec) {
		Map<String, Object> result = new HashMap<String, Object>();
						
		List<Map<String, Object>> resultData = this.praAnestesiDokterBedahHeaderDao.getPraAnestesiDokterByNoRecAntrian(noRec);
						
		if(CommonUtil.isNotNullOrEmpty(resultData)) {
			result.put("showData", resultData);
		}
		return result;
	}
	
	

}
