package com.jasamedika.medifirst2000.service.impl;

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

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.jasamedika.medifirst2000.converter.BaseConverterImpl;
import com.jasamedika.medifirst2000.dao.PengkajianKebutuhanDasarDao;
import com.jasamedika.medifirst2000.entities.AntrianPasienDiPeriksa;
import com.jasamedika.medifirst2000.entities.MapPengkajianKebutuhanDasar;
import com.jasamedika.medifirst2000.entities.PengkajianAwalBaru;
import com.jasamedika.medifirst2000.entities.PengkajianKebutuhanDasar;
import com.jasamedika.medifirst2000.service.PengkajianKebutuhanDasarService;
import com.jasamedika.medifirst2000.util.CommonUtil;
import com.jasamedika.medifirst2000.vo.AntrianPasienDiPeriksaVO;
import com.jasamedika.medifirst2000.vo.MapPengkajianKebutuhanDasarVO;
import com.jasamedika.medifirst2000.vo.PengkajianAwalBaruVO;
import com.jasamedika.medifirst2000.vo.PengkajianKebutuhanDasarVO;

@Service("pengkajianKebutuhanDasarService")
public class PengkajianKebutuhanDasarServiceImpl implements PengkajianKebutuhanDasarService{

	@Autowired
	private PengkajianKebutuhanDasarDao pengkajianKebutuhanDasarDao;
	
	@Autowired
	private BaseConverterImpl<PengkajianKebutuhanDasarVO, PengkajianKebutuhanDasar> pengkajianKebutuhanDasarConverter;
	
	@Autowired
	private BaseConverterImpl<PengkajianAwalBaruVO, PengkajianAwalBaru> pengkajianAwalBaruConverter;
	
	@Autowired
	private BaseConverterImpl<AntrianPasienDiPeriksaVO, AntrianPasienDiPeriksa> antrianPasienDiPeriksaConverter;
	
	@Autowired
	private BaseConverterImpl<MapPengkajianKebutuhanDasarVO, MapPengkajianKebutuhanDasar> mapPengkajianKebutuhanDasarConverter;
	
	@Override
	public Map<String, Object> save(PengkajianKebutuhanDasarVO vo){
		Map<String, Object> result = new HashMap<>();
		
		PengkajianKebutuhanDasar pengkajianKebutuhanDasar = new PengkajianKebutuhanDasar();
		
		if(CommonUtil.isNotNullOrEmpty(vo)){
			pengkajianKebutuhanDasar = pengkajianKebutuhanDasarConverter.transferVOToModel(vo, new PengkajianKebutuhanDasar());
		}
		if(CommonUtil.isNotNullOrEmpty(vo.getAntrianPasienDiPeriksa())){
			pengkajianKebutuhanDasar.setAntrianPasienDiPeriksa(
					antrianPasienDiPeriksaConverter.transferVOToModel(vo.getAntrianPasienDiPeriksa(), new AntrianPasienDiPeriksa()));
		}
		if(CommonUtil.isNotNullOrEmpty(vo.getPengkajianAwalBaru())){
			pengkajianKebutuhanDasar.setPengkajianAwalBaru(pengkajianAwalBaruConverter.transferVOToModel(vo.getPengkajianAwalBaru(), new PengkajianAwalBaru()));
		}
		if(CommonUtil.isNotNullOrEmpty(vo.getKebutuhanDasar())){
			Set<MapPengkajianKebutuhanDasar> kebutuhanDasar = new HashSet<>();
			
			for(MapPengkajianKebutuhanDasarVO mapPengkajianKebutuhanDasarVO : vo.getKebutuhanDasar()){
				MapPengkajianKebutuhanDasar mapPengkajianKebutuhanDasar = new MapPengkajianKebutuhanDasar();
				
				if(CommonUtil.isNotNullOrEmpty(mapPengkajianKebutuhanDasarVO)){
					 mapPengkajianKebutuhanDasar = mapPengkajianKebutuhanDasarConverter.
							 transferVOToModel(mapPengkajianKebutuhanDasarVO, new MapPengkajianKebutuhanDasar());
					 mapPengkajianKebutuhanDasar.setPengkajianKebutuhanDasar(pengkajianKebutuhanDasar);
				}
				if(CommonUtil.isNotNullOrEmpty(mapPengkajianKebutuhanDasar)){
					kebutuhanDasar.add(mapPengkajianKebutuhanDasar);
				}
			}
			if(CommonUtil.isNotNullOrEmpty(kebutuhanDasar)){
				pengkajianKebutuhanDasar.setKebutuhanDasar(kebutuhanDasar);
			}
		}
		if(CommonUtil.isNotNullOrEmpty(pengkajianKebutuhanDasar)){
			PengkajianKebutuhanDasar pengkajianKebutuhanDasarResult = pengkajianKebutuhanDasarDao.save(pengkajianKebutuhanDasar);
			result.put("noRec", pengkajianKebutuhanDasarResult.noRec);
		}
		return result;
	}
	
	@Override
	public Map<String, Object> getOneByPengkajianAwalBaru(String noRec){
		Map<String, Object> result = new HashMap<>();
		if(CommonUtil.isNotNullOrEmpty(noRec)){
			List<Map<String, Object>> kebutuhanDasar = pengkajianKebutuhanDasarDao.getMapPengkajianKebutuhanDasar(noRec);
			result.put("kebutuhanDasar", kebutuhanDasar);
		}
		return result;
	}
}
