package com.jasamedika.medifirst2000.service.impl;

import java.util.HashMap;
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.HargaNettoProdukByKelasDao;
import com.jasamedika.medifirst2000.dao.custom.PelatihanBiayaDiklatDaoCustom;
import com.jasamedika.medifirst2000.entities.AsalProduk;
import com.jasamedika.medifirst2000.entities.HargaNettoProdukByKelas;
import com.jasamedika.medifirst2000.entities.JenisTarif;
import com.jasamedika.medifirst2000.entities.Kelas;
import com.jasamedika.medifirst2000.entities.Produk;
import com.jasamedika.medifirst2000.entities.Ruangan;
import com.jasamedika.medifirst2000.service.PelatihanBiayaDiklatService;
import com.jasamedika.medifirst2000.util.CommonUtil;
import com.jasamedika.medifirst2000.vo.AsalProdukVO;
import com.jasamedika.medifirst2000.vo.JenisTarifVO;
import com.jasamedika.medifirst2000.vo.KelasVO;
import com.jasamedika.medifirst2000.vo.PelatihanBiayaDiklatVO;
import com.jasamedika.medifirst2000.vo.ProdukVO;

@Service("PelatihanBiayaDiklatService")
public class PelatihanBiayaDiklatServiceImpl extends BaseAngaranServiceImpl implements PelatihanBiayaDiklatService {

	@Autowired
	private BaseConverterImpl<AsalProdukVO, AsalProduk> asalProdukConverter;
	
	@Autowired
	private BaseConverterImpl<ProdukVO, Produk> produkConverter;
	
	@Autowired
	private BaseConverterImpl<JenisTarifVO, JenisTarif> jenisTarifConverter;
	
	@Autowired
	private BaseConverterImpl<KelasVO, Kelas> kelasConverter;
	
	@Autowired
	private HargaNettoProdukByKelasDao hargaNettoProdukByKelasDao;
	
	@Autowired
	private PelatihanBiayaDiklatDaoCustom pelatihanBiayaDiklatDaoCustom;
	
	
	
	
	
	@Override
	public Map<String, Object> saveBiayaDiklat(PelatihanBiayaDiklatVO vo) {
		Double persenPpn = 0.0;
		Double persenDiskon = 0.0;
		Double ppn = 0.0;
		Double diskon = 0.0;
		Double hargaSatuan = 0.0;

		if (CommonUtil.isNotNullOrEmpty(vo.getDiskon())) {
			persenDiskon = vo.getDiskon();
		}

		if (CommonUtil.isNotNullOrEmpty(vo.getHargaSatuan())) {
			hargaSatuan = vo.getHargaSatuan();
		}

		ppn = ((persenDiskon / hargaSatuan) * 100);
		diskon = ((persenPpn / hargaSatuan) * 100);
		Double hargaNetto1 = hargaSatuan + ppn;
		Double hargaNetto2 = hargaNetto1 - diskon;
		HargaNettoProdukByKelas hargaNettoProdukByKelas = new HargaNettoProdukByKelas();

		if(CommonUtil.isNotNullOrEmpty(vo.getAsalProduk())){
			hargaNettoProdukByKelas.setAsalProduk(asalProdukConverter.transferVOToModel(vo.getAsalProduk(), new AsalProduk()));
		}
		hargaNettoProdukByKelas.setTglBerlakuAwal(vo.getTglBerlakuAwal());
		hargaNettoProdukByKelas.setTglBerlakuAkhir(vo.getTglBerlakuAhir());
		hargaNettoProdukByKelas.setPersenDiscount(vo.getDiskon());
		hargaNettoProdukByKelas.setFactorRate(0.0);
		hargaNettoProdukByKelas.setHargaDiscount(diskon);
		hargaNettoProdukByKelas.setHargaNetto1(hargaNetto1);
		hargaNettoProdukByKelas.setHargaNetto2(hargaNetto2);
		hargaNettoProdukByKelas.setHargaSatuan(hargaSatuan);
		hargaNettoProdukByKelas.setKdProfile((short) 0);

		hargaNettoProdukByKelas.setPersenDiscount(vo.getDiskon());
		if(CommonUtil.isNotNullOrEmpty(vo.getKomponen())){
			hargaNettoProdukByKelas.setProduk(produkConverter.transferVOToModel(vo.getKomponen(),new Produk()));
		}
		
		if(CommonUtil.isNotNullOrEmpty(vo.getJenisTarif())){
			
		}
		if(CommonUtil.isNotNullOrEmpty(vo.getJenisTarif())){
			hargaNettoProdukByKelas.setJenisTarif(jenisTarifConverter.transferVOToModel(vo.getJenisTarif(), new JenisTarif()));
		}
		
		if(CommonUtil.isNotNullOrEmpty(vo.getKelas())){
			hargaNettoProdukByKelas.setKelas(kelasConverter.transferVOToModel(vo.getKelas(), new Kelas()));
		}
		
		hargaNettoProdukByKelas.setStatusEnabled(true);

		Map<String,Object> data=new HashMap<String,Object>();
		hargaNettoProdukByKelas=hargaNettoProdukByKelasDao.save(hargaNettoProdukByKelas);
		data.put("id", hargaNettoProdukByKelas.getId());
		return data;

	}



	@Override
	public Map<String, Object> listBiayaDiklat(Integer page, Integer limit, String sort, String dir) {
		Ruangan r=getRuanganByUserLogin();
		int totalRow = 0;
		int totalPages = 0;
		int pageRequested = page;

		if (totalRow > 0) {
			totalPages = (int) Math.ceil((double) totalRow / (double) limit);
		} else {
			totalPages = 0;
		}

		if (pageRequested > totalPages)
			pageRequested = totalPages;
		int rowStart = pageRequested * limit - limit;
		if (rowStart < 0) {
			rowStart = 0;
		}
		int rowEnd = limit;
		Map<String, Object> result = new HashMap<String, Object>();
		result.put("data", pelatihanBiayaDiklatDaoCustom.listBiayaDiklat(rowStart, rowEnd, sort, dir));
		result.put("totalPages", totalPages);
		result.put("totalRow", totalRow);
		return result;
	}
	
	
	@Override
	public Map<String, Object> daftarKomponen() {
		Map<String, Object> result = new HashMap<String, Object>();
		result.put("data", pelatihanBiayaDiklatDaoCustom.daftarKomponen());
		return result;
	}
	
}
