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 org.springframework.transaction.annotation.Transactional;

import com.jasamedika.medifirst2000.converter.BaseConverterImpl;
import com.jasamedika.medifirst2000.dao.MapFaktorEvaluasiDao;
import com.jasamedika.medifirst2000.dao.MasterEvaluasiJabatanDao;
import com.jasamedika.medifirst2000.entities.FaktorEvaluasi;
import com.jasamedika.medifirst2000.entities.Jabatan;
import com.jasamedika.medifirst2000.entities.MapFaktorEvaluasi;
import com.jasamedika.medifirst2000.entities.MasterEvaluasiJabatan;
import com.jasamedika.medifirst2000.service.MasterEvaluasiJabatanService;
import com.jasamedika.medifirst2000.util.CommonUtil;
import com.jasamedika.medifirst2000.vo.FaktorEvaluasiVO;
import com.jasamedika.medifirst2000.vo.JabatanVO;
import com.jasamedika.medifirst2000.vo.MasterEvaluasiJabatanVO;

/**
 * Implement class for MasterEvaluasiJabatanService
 * 
 * @author Generator
 * @param <T>
 */
@Service("masterEvaluasiJabatanService")
public class MasterEvaluasiJabatanServiceImpl extends BaseVoServiceImpl implements MasterEvaluasiJabatanService {

	@Autowired
	private BaseConverterImpl<MasterEvaluasiJabatanVO, MasterEvaluasiJabatan> masterEvaluasiJabatanConverter;
	@Autowired
	private BaseConverterImpl<JabatanVO, Jabatan> jabatanConverter;
	@Autowired
	private BaseConverterImpl<FaktorEvaluasiVO, FaktorEvaluasi> faktorEvaluasiConverter;
	@Autowired
	private MasterEvaluasiJabatanDao masterEvaluasiJabatanDao;
	@Autowired
	private MapFaktorEvaluasiDao mapFaktorEvaluasiDao;

	@Override
	public Map<String, Object> saveMasterEvaluasiJabatan(MasterEvaluasiJabatanVO vo) {
		Map<String, Object> result = new HashMap<String, Object>();
		MasterEvaluasiJabatan model = new MasterEvaluasiJabatan();
		model = masterEvaluasiJabatanConverter.transferVOToModel(vo, model);
		model.setNoRec(vo.getNoRec());
		model.setBulan(vo.getBulan());
		model.setTahun(vo.getTahun());
		model.setTotalNilai(vo.getTotalNilai());

		if (CommonUtil.isNotNullOrEmpty(vo.getJabatan())) {
			model.setJabatan(jabatanConverter.transferVOToModel(vo.getJabatan(), new Jabatan()));
		}

		if (CommonUtil.isNotNullOrEmpty(vo.getFaktor1())) {
			model.setFaktor1(faktorEvaluasiConverter.transferVOToModel(vo.getFaktor1(), new FaktorEvaluasi()));
		}
		if (CommonUtil.isNotNullOrEmpty(vo.getFaktor2())) {
			model.setFaktor2(faktorEvaluasiConverter.transferVOToModel(vo.getFaktor2(), new FaktorEvaluasi()));
		}
		if (CommonUtil.isNotNullOrEmpty(vo.getFaktor3())) {
			model.setFaktor3(faktorEvaluasiConverter.transferVOToModel(vo.getFaktor3(), new FaktorEvaluasi()));
		}
		if (CommonUtil.isNotNullOrEmpty(vo.getFaktor4())) {
			model.setFaktor4(faktorEvaluasiConverter.transferVOToModel(vo.getFaktor4(), new FaktorEvaluasi()));
		}
		if (CommonUtil.isNotNullOrEmpty(vo.getFaktor5())) {
			model.setFaktor5(faktorEvaluasiConverter.transferVOToModel(vo.getFaktor5(), new FaktorEvaluasi()));
		}
		if (CommonUtil.isNotNullOrEmpty(vo.getFaktor7())) {
			model.setFaktor7(faktorEvaluasiConverter.transferVOToModel(vo.getFaktor7(), new FaktorEvaluasi()));
		}
		if (CommonUtil.isNotNullOrEmpty(vo.getFaktor8())) {
			model.setFaktor8(faktorEvaluasiConverter.transferVOToModel(vo.getFaktor8(), new FaktorEvaluasi()));
		}
		if (CommonUtil.isNotNullOrEmpty(vo.getFaktor9())) {
			model.setFaktor9(faktorEvaluasiConverter.transferVOToModel(vo.getFaktor9(), new FaktorEvaluasi()));
		}
		if (CommonUtil.isNotNullOrEmpty(vo.getFaktor10())) {
			model.setFaktor10(faktorEvaluasiConverter.transferVOToModel(vo.getFaktor10(), new FaktorEvaluasi()));
		}
		if (CommonUtil.isNotNullOrEmpty(vo.getFaktorA())) {
			model.setFaktorA(faktorEvaluasiConverter.transferVOToModel(vo.getFaktorA(), new FaktorEvaluasi()));
		}
		if (CommonUtil.isNotNullOrEmpty(vo.getFaktorB())) {
			model.setFaktorB(faktorEvaluasiConverter.transferVOToModel(vo.getFaktorB(), new FaktorEvaluasi()));
		}
		if (CommonUtil.isNotNullOrEmpty(vo.getFaktorC())) {
			model.setFaktorC(faktorEvaluasiConverter.transferVOToModel(vo.getFaktorC(), new FaktorEvaluasi()));
		}
		if (CommonUtil.isNotNullOrEmpty(vo.getFaktorD())) {
			model.setFaktorD(faktorEvaluasiConverter.transferVOToModel(vo.getFaktorD(), new FaktorEvaluasi()));
		}
		if (CommonUtil.isNotNullOrEmpty(vo.getFaktorE())) {
			model.setFaktorE(faktorEvaluasiConverter.transferVOToModel(vo.getFaktorE(), new FaktorEvaluasi()));
		}
		if (CommonUtil.isNotNullOrEmpty(vo.getFaktorF())) {
			model.setFaktorF(faktorEvaluasiConverter.transferVOToModel(vo.getFaktorF(), new FaktorEvaluasi()));
		}
		if (CommonUtil.isNotNullOrEmpty(vo.getFaktorG())) {
			model.setFaktorG(faktorEvaluasiConverter.transferVOToModel(vo.getFaktorG(), new FaktorEvaluasi()));
		}
		if (CommonUtil.isNotNullOrEmpty(vo.getFaktorH())) {
			model.setFaktorH(faktorEvaluasiConverter.transferVOToModel(vo.getFaktorH(), new FaktorEvaluasi()));
		}
		if (CommonUtil.isNotNullOrEmpty(vo.getFaktorI())) {
			model.setFaktorI(faktorEvaluasiConverter.transferVOToModel(vo.getFaktorI(), new FaktorEvaluasi()));
		}
		if (CommonUtil.isNotNullOrEmpty(vo.getFaktorJ())) {
			model.setFaktorJ(faktorEvaluasiConverter.transferVOToModel(vo.getFaktorJ(), new FaktorEvaluasi()));
		}
		if (CommonUtil.isNotNullOrEmpty(vo.getFaktorK())) {
			model.setFaktorK(faktorEvaluasiConverter.transferVOToModel(vo.getFaktorK(), new FaktorEvaluasi()));
		}
		if (CommonUtil.isNotNullOrEmpty(vo.getFaktorL())) {
			model.setFaktorL(faktorEvaluasiConverter.transferVOToModel(vo.getFaktorL(), new FaktorEvaluasi()));
		}

		MasterEvaluasiJabatan resultDomain = masterEvaluasiJabatanDao.save(model);
		if (CommonUtil.isNotNullOrEmpty(resultDomain)) {
			result.put("noRec", resultDomain.getNoRec());
		}

		return result;
	}

	@Override
	@Transactional(readOnly = false)
	public Map<String, Object> saveMasterEvaluasiJabatan(List<MasterEvaluasiJabatanVO> vo) {
		Map<String, Object> result = new HashMap<String, Object>();
		for (MasterEvaluasiJabatanVO masterEvaluasiJabatanVO : vo) {
			result = saveMasterEvaluasiJabatan(masterEvaluasiJabatanVO);
		}
		return result;
	}

	@Override
	public Map<String, Object> findEvaluasiByJabatanDanTahun(Integer tahun, Integer bulan, Integer jabatan) {
		return null;
	}

	@Override
	public Map<String, Object> findJabatan() {
		Map<String, Object> result = new HashMap<String, Object>();
		try {

			result.put("data", masterEvaluasiJabatanDao.findJabatan());
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		}
		return result;
	}

	@Override
	public Map<String, Object> hitungPoinEvaluasi(MasterEvaluasiJabatanVO vo) {
		Map<String, Object> result = new HashMap<String, Object>();
		try {
			MasterEvaluasiJabatan masterEvaluasiJabatan = new MasterEvaluasiJabatan();
			masterEvaluasiJabatan = masterEvaluasiJabatanConverter.transferVOToModel(vo, new MasterEvaluasiJabatan());
			if (CommonUtil.isNotNullOrEmpty(vo.getJabatan())) {
				masterEvaluasiJabatan.setJabatan(jabatanConverter.transferVOToModel(vo.getJabatan(), new Jabatan()));
			}
			if (CommonUtil.isNotNullOrEmpty(vo.getFaktor1())) {
				masterEvaluasiJabatan
						.setFaktor1(faktorEvaluasiConverter.transferVOToModel(vo.getFaktor1(), new FaktorEvaluasi()));
			}
			if (CommonUtil.isNotNullOrEmpty(vo.getFaktor2())) {
				masterEvaluasiJabatan
						.setFaktor2(faktorEvaluasiConverter.transferVOToModel(vo.getFaktor2(), new FaktorEvaluasi()));
			}
			if (CommonUtil.isNotNullOrEmpty(vo.getFaktor3())) {
				masterEvaluasiJabatan
						.setFaktor3(faktorEvaluasiConverter.transferVOToModel(vo.getFaktor3(), new FaktorEvaluasi()));
			}
			if (CommonUtil.isNotNullOrEmpty(vo.getFaktor4())) {
				masterEvaluasiJabatan
						.setFaktor4(faktorEvaluasiConverter.transferVOToModel(vo.getFaktor4(), new FaktorEvaluasi()));
			}
			if (CommonUtil.isNotNullOrEmpty(vo.getFaktor5())) {
				masterEvaluasiJabatan
						.setFaktor5(faktorEvaluasiConverter.transferVOToModel(vo.getFaktor5(), new FaktorEvaluasi()));
			}
			if (CommonUtil.isNotNullOrEmpty(vo.getFaktor7())) {
				masterEvaluasiJabatan
						.setFaktor7(faktorEvaluasiConverter.transferVOToModel(vo.getFaktor7(), new FaktorEvaluasi()));
			}
			if (CommonUtil.isNotNullOrEmpty(vo.getFaktor8())) {
				masterEvaluasiJabatan
						.setFaktor8(faktorEvaluasiConverter.transferVOToModel(vo.getFaktor8(), new FaktorEvaluasi()));
			}
			if (CommonUtil.isNotNullOrEmpty(vo.getFaktor9())) {
				masterEvaluasiJabatan
						.setFaktor9(faktorEvaluasiConverter.transferVOToModel(vo.getFaktor9(), new FaktorEvaluasi()));
			}
			if (CommonUtil.isNotNullOrEmpty(vo.getFaktor10())) {
				masterEvaluasiJabatan
						.setFaktor10(faktorEvaluasiConverter.transferVOToModel(vo.getFaktor10(), new FaktorEvaluasi()));
			}
			if (CommonUtil.isNotNullOrEmpty(vo.getFaktorA())) {
				masterEvaluasiJabatan
						.setFaktorA(faktorEvaluasiConverter.transferVOToModel(vo.getFaktorA(), new FaktorEvaluasi()));
			}
			if (CommonUtil.isNotNullOrEmpty(vo.getFaktorB())) {
				masterEvaluasiJabatan
						.setFaktorB(faktorEvaluasiConverter.transferVOToModel(vo.getFaktorB(), new FaktorEvaluasi()));
			}
			if (CommonUtil.isNotNullOrEmpty(vo.getFaktorC())) {
				masterEvaluasiJabatan
						.setFaktorC(faktorEvaluasiConverter.transferVOToModel(vo.getFaktorC(), new FaktorEvaluasi()));
			}
			if (CommonUtil.isNotNullOrEmpty(vo.getFaktorD())) {
				masterEvaluasiJabatan
						.setFaktorD(faktorEvaluasiConverter.transferVOToModel(vo.getFaktorD(), new FaktorEvaluasi()));
			}
			if (CommonUtil.isNotNullOrEmpty(vo.getFaktorE())) {
				masterEvaluasiJabatan
						.setFaktorE(faktorEvaluasiConverter.transferVOToModel(vo.getFaktorE(), new FaktorEvaluasi()));
			}
			if (CommonUtil.isNotNullOrEmpty(vo.getFaktorF())) {
				masterEvaluasiJabatan
						.setFaktorF(faktorEvaluasiConverter.transferVOToModel(vo.getFaktorF(), new FaktorEvaluasi()));
			}
			if (CommonUtil.isNotNullOrEmpty(vo.getFaktorG())) {
				masterEvaluasiJabatan
						.setFaktorG(faktorEvaluasiConverter.transferVOToModel(vo.getFaktorG(), new FaktorEvaluasi()));
			}
			if (CommonUtil.isNotNullOrEmpty(vo.getFaktorH())) {
				masterEvaluasiJabatan
						.setFaktorH(faktorEvaluasiConverter.transferVOToModel(vo.getFaktorH(), new FaktorEvaluasi()));
			}
			if (CommonUtil.isNotNullOrEmpty(vo.getFaktorI())) {
				masterEvaluasiJabatan
						.setFaktorI(faktorEvaluasiConverter.transferVOToModel(vo.getFaktorI(), new FaktorEvaluasi()));
			}
			if (CommonUtil.isNotNullOrEmpty(vo.getFaktorJ())) {
				masterEvaluasiJabatan
						.setFaktorJ(faktorEvaluasiConverter.transferVOToModel(vo.getFaktorJ(), new FaktorEvaluasi()));
			}
			if (CommonUtil.isNotNullOrEmpty(vo.getFaktorK())) {
				masterEvaluasiJabatan
						.setFaktorK(faktorEvaluasiConverter.transferVOToModel(vo.getFaktorK(), new FaktorEvaluasi()));
			}
			if (CommonUtil.isNotNullOrEmpty(vo.getFaktorL())) {
				masterEvaluasiJabatan
						.setFaktorL(faktorEvaluasiConverter.transferVOToModel(vo.getFaktorL(), new FaktorEvaluasi()));
			}

			double total = 0.0;
			try

			{
				double localTotal = 0.0;
				double p1 = Double.parseDouble(masterEvaluasiJabatan.getFaktor1().getNilai());
				double p2 = Math.round((p1
						* Double.parseDouble(masterEvaluasiJabatan.getFaktor2().getNilai().replace("%", "")) / 100));
				double p3 = Math.round(
						p1 * Double.parseDouble(masterEvaluasiJabatan.getFaktor3().getNilai().replace("%", "")) / 100);
				double knowHow = p1 + p2 + p3;
				double p4 = ((knowHow
						* Double.parseDouble(masterEvaluasiJabatan.getFaktor4().getNilai().replace("%", "")) / 100));
				double p5 = ((knowHow
						* Double.parseDouble(masterEvaluasiJabatan.getFaktor5().getNilai().replace("%", "")) / 100));

				double problem = p4 + p5;
				Integer i7 = masterEvaluasiJabatan.getFaktor7().getId();
				Integer i8 = masterEvaluasiJabatan.getFaktor8().getId();

				MapFaktorEvaluasi mapFaktorEvaluasi = mapFaktorEvaluasiDao.findMapping(i7, i8);

				double p8 = 0.0;
				if (CommonUtil.isNotNullOrEmpty(mapFaktorEvaluasi)) {
					p8 = Math.round(mapFaktorEvaluasi.getValue());
				}

				double nilaiPeranDanWewenang = Math
						.round(Double.parseDouble(masterEvaluasiJabatan.getFaktor9().getNilai()) * p8);

				double nilaiAcct = (nilaiPeranDanWewenang
						* Double.parseDouble(masterEvaluasiJabatan.getFaktor10().getNilai().replace("%", "")) / 100);

				double p6 = Double.parseDouble(masterEvaluasiJabatan.getFaktorA().getNilai())
						+ Double.parseDouble(masterEvaluasiJabatan.getFaktorB().getNilai())
						+ Double.parseDouble(masterEvaluasiJabatan.getFaktorC().getNilai())
						+ Double.parseDouble(masterEvaluasiJabatan.getFaktorD().getNilai())
						+ Double.parseDouble(masterEvaluasiJabatan.getFaktorE().getNilai())
						+ Double.parseDouble(masterEvaluasiJabatan.getFaktorF().getNilai())
						+ Double.parseDouble(masterEvaluasiJabatan.getFaktorG().getNilai())
						+ Double.parseDouble(masterEvaluasiJabatan.getFaktorH().getNilai())
						+ Double.parseDouble(masterEvaluasiJabatan.getFaktorI().getNilai())
						+ Double.parseDouble(masterEvaluasiJabatan.getFaktorJ().getNilai())
						+ Double.parseDouble(masterEvaluasiJabatan.getFaktorK().getNilai())
						+ Double.parseDouble(masterEvaluasiJabatan.getFaktorL().getNilai());
				localTotal = p6 + nilaiAcct + problem + knowHow;

				total += localTotal;
			} catch (Exception e) {
				e.printStackTrace();
			}

			result.put("result", Math.round(total));
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		}
		return result;
	}

	@Override
	public Map<String, Object> findEvaluasiByJabatan(Integer idJabatan, Integer tahun, String bulan) {
		Map<String, Object> result = new HashMap<String, Object>();
		try {

			result.put("data", masterEvaluasiJabatanDao.findEvaluasiByJabatan(idJabatan, tahun, bulan));
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		}
		return result;
	}

}
