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.PengukuranKebisinganDao;
import com.jasamedika.medifirst2000.entities.BakuMutu;
import com.jasamedika.medifirst2000.entities.PengukuranKebisingan;
import com.jasamedika.medifirst2000.entities.Ruangan;
import com.jasamedika.medifirst2000.service.PengukuranPencahayaanService;
import com.jasamedika.medifirst2000.util.CommonUtil;
import com.jasamedika.medifirst2000.vo.BakuMutuVO;
import com.jasamedika.medifirst2000.vo.PengukuranKebisinganVO;
import com.jasamedika.medifirst2000.vo.RuanganVO;

@Service("pengukuranPencahayaanService")
public class PengukuranPencahayaanServiceImpl implements PengukuranPencahayaanService{
	
	@Autowired
	private PengukuranKebisinganDao pengukuranKebisinganDao;
	
	@Autowired
	private BaseConverterImpl<PengukuranKebisinganVO, PengukuranKebisingan> pengukuranPencahayaanConverter;
	
	@Autowired
	private BaseConverterImpl<RuanganVO, Ruangan> ruanganConverter;
	
	@Autowired
	private BaseConverterImpl<BakuMutuVO, BakuMutu> bakuMutuConverter;
	
	@Override
	public Map<String, Object> getUnitRuangan(){
		Map<String, Object> result = new HashMap<>();
		List<Map<String, Object>> listData = pengukuranKebisinganDao.getUnitRuangan();
		if(CommonUtil.isNotNullOrEmpty(listData)){
			result.put("unitRuangan", listData);
		}
		return result;
		
	}
	
	@Override
	public Map<String, Object> getBakuMutu(){
		Map<String, Object> result = new HashMap<>();
		List<Map<String, Object>> listData = pengukuranKebisinganDao.getBakuMutu();
		if(CommonUtil.isNotNullOrEmpty(listData)){
			result.put("bakuMutu", listData);
		}
		return result;
		
	}
	
	@Override
	public Map<String, Object> savePengukuranPencahayaan(PengukuranKebisinganVO vo){
		Map<String, Object> result = new HashMap<>();
		PengukuranKebisingan pengukuranPencahayaan = pengukuranPencahayaanConverter.transferVOToModel(vo, new PengukuranKebisingan());
		
		//date : 17.09.2018
		//by iwan kasan
		//dijadikan textbox, sesuai dengan permintaan user K3KL
//		if(CommonUtil.isNotNullOrEmpty(vo.getNamaRuangan())){
//			pengukuranPencahayaan.setNamaRuangan(ruanganConverter.transferVOToModel(vo.getNamaRuangan(), new Ruangan()));
//		}
		
		//date : 17.09.2018
		//by iwan kasan
		//dijadikan textbox, sesuai dengan permintaan user K3KL
//		if(CommonUtil.isNotNullOrEmpty(vo.getBakuMutu())){
//			pengukuranPencahayaan.setBakuMutu(bakuMutuConverter.transferVOToModel(vo.getBakuMutu(), new BakuMutu()));
//		}
		
		if(CommonUtil.isNotNullOrEmpty(pengukuranPencahayaan)){
			PengukuranKebisingan pengukuranKebisinganResult = pengukuranKebisinganDao.save(pengukuranPencahayaan);
			result.put("id", pengukuranKebisinganResult.getId());
		}
		return result;
	}
	
	@Override
	public Map<String, Object> getRepotingPengukurangPencahayaan(String startDate, String endDate) {
		Map<String, Object> result = new HashMap<>();
		
		Map<String, Object> header = new HashMap<>();
		header.put("startDate", startDate);
		header.put("endDate", endDate);
		
		List<Map<String, Object>> listData = this.pengukuranKebisinganDao.getPengukuranPencahayaanByPeriode(startDate, endDate);
		
		result.put("header", header);
		result.put("listData", listData);
		return result;
	}
	
	@Override
	public Map<String, Object> getPengukuranPencahayaan(){
		Map<String, Object> result = new HashMap<>();
		List<Map<String, Object>> listData = pengukuranKebisinganDao.getPengukuranPencahayaan();
		if(CommonUtil.isNotNullOrEmpty(listData)){
			result.put("pengukuranPencahayaan", listData);
		}
		return result;
	}
	
	@Override
	public boolean deletePengukuranPencahayaan(Integer id) {
		if (CommonUtil.isNotNullOrEmpty(id)){
			PengukuranKebisingan pengukuranKebisingan = this.pengukuranKebisinganDao.findOne(id);
			pengukuranKebisingan.setStatusEnabled(false);
			pengukuranKebisinganDao.save(pengukuranKebisingan);
			return true;
		}else{
			return false;
		}
	}

}
