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

import com.jasamedika.medifirst2000.converter.BaseConverterImpl;
import com.jasamedika.medifirst2000.dao.CetakPengantarSuratDao;
import com.jasamedika.medifirst2000.dao.DokumenDao;
import com.jasamedika.medifirst2000.entities.CetakPengantarSurat;
import com.jasamedika.medifirst2000.entities.Dokumen;
import com.jasamedika.medifirst2000.entities.DraftSurat;
import com.jasamedika.medifirst2000.entities.JenisDokumen;
import com.jasamedika.medifirst2000.entities.Pegawai;
import com.jasamedika.medifirst2000.entities.StatusBerkas;
import com.jasamedika.medifirst2000.entities.StatusYaTidak;
import com.jasamedika.medifirst2000.entities.TipePengirimSurat;
import com.jasamedika.medifirst2000.service.CetakPengantarSuratService;
import com.jasamedika.medifirst2000.service.LoginUserService;
import com.jasamedika.medifirst2000.util.CommonUtil;
import com.jasamedika.medifirst2000.vo.CetakPengantarSuratVO;
import com.jasamedika.medifirst2000.vo.DraftSuratVO;
import com.jasamedika.medifirst2000.vo.PegawaiVO;
import com.jasamedika.medifirst2000.vo.StatusBerkasVO;
import com.jasamedika.medifirst2000.vo.StatusYaTidakVO;
import com.jasamedika.medifirst2000.vo.TipePengirimSuratVO;

@Service("CetakPengantarSuratService")
public class CetakPengantarSuratServiceImpl implements CetakPengantarSuratService{
	
	@Autowired
	private CetakPengantarSuratDao cetakPengantarSuratDao;
	
	@Autowired
	private DokumenDao dokumenDao;
	
	@Autowired
	private LoginUserService loginUserService;
	
	@Autowired
	private BaseConverterImpl<CetakPengantarSuratVO, CetakPengantarSurat> pengantarSuratConverter;
	
	@Autowired
	private BaseConverterImpl<TipePengirimSuratVO, TipePengirimSurat> tipePengirimSuratConverter;
	
	@Autowired
	private BaseConverterImpl<StatusBerkasVO, StatusBerkas> statusBerkasConverter;
	
	@Autowired
	private BaseConverterImpl<StatusYaTidakVO, StatusYaTidak> statusDiterimaConverter;
	
	@Autowired
	private BaseConverterImpl<PegawaiVO, Pegawai> pegawaiConverter;
	
	@Override
	@Transactional
	public Map<String, Object> addPengantarSurat(CetakPengantarSuratVO vo) {
		Map<String, Object> result = new HashMap<String, Object>();
		
		// Set Dokumen
		Dokumen dokumen = new Dokumen();
		dokumen.setDeskripsiDokumen(vo.getPerihalSurat());
		JenisDokumen jenisDokumen = new JenisDokumen();
		jenisDokumen.setId(9); // menyatakan bahwa jenis dokumen ialah pengantar surat
		dokumen.setJenisDokumen(jenisDokumen);
		dokumen.setPegawaiPembuat(loginUserService.getLoginUser().getPegawai());
		dokumen.setNamaJudulDokumen(vo.getPerihalSurat());
		dokumen.setNamaPegawaiPembuat(loginUserService.getLoginUser().getPegawai().getNamaLengkap());
		dokumen.setTglDokumen(vo.getTanggalSuratDiserahkan());
		dokumen.setqDokumen(0);
		
		Dokumen resultDokumen = new Dokumen();
		if(CommonUtil.isNotNullOrEmpty(dokumen)){
			resultDokumen = dokumenDao.save(dokumen);
		}
		if(CommonUtil.isNotNullOrEmpty(resultDokumen)){
			result.put("Dokumen", resultDokumen.getId());
		}
		
		// Set Pengantar Surat
		CetakPengantarSurat pengantarSurat = new CetakPengantarSurat();
		if(CommonUtil.isNotNullOrEmpty(vo)){
			pengantarSurat = pengantarSuratConverter.transferVOToModel(vo, new CetakPengantarSurat());
		}
		if(CommonUtil.isNotNullOrEmpty(resultDokumen)){
			pengantarSurat.setDokumen(resultDokumen);
		}
		if(CommonUtil.isNotNullOrEmpty(vo.getTipePengirimSurat())){
			pengantarSurat.setTipePengirimSurat(tipePengirimSuratConverter.transferVOToModel(vo.getTipePengirimSurat(), new TipePengirimSurat()));
		}
		if(CommonUtil.isNotNullOrEmpty(vo.getStatusBerkas())){
			pengantarSurat.setStatusBerkas(statusBerkasConverter.transferVOToModel(vo.getStatusBerkas(), new StatusBerkas()));
		}
		if(CommonUtil.isNotNullOrEmpty(vo.getStatusDiterima())){
			pengantarSurat.setStatusDiterima(statusDiterimaConverter.transferVOToModel(vo.getStatusDiterima(), new StatusYaTidak()));
		}
		if(CommonUtil.isNotNullOrEmpty(vo.getNamaPengantar())){
			pengantarSurat.setNamaPengantar(pegawaiConverter.transferVOToModel(vo.getNamaPengantar(), new Pegawai()));
		}
		if(CommonUtil.isNotNullOrEmpty(vo.getNamaPenerima())){
			pengantarSurat.setNamaPenerima(pegawaiConverter.transferVOToModel(vo.getNamaPenerima(), new Pegawai()));
		}
		
		CetakPengantarSurat resultPengantarSurat = new CetakPengantarSurat();
		if(CommonUtil.isNotNullOrEmpty(pengantarSurat)){
			resultPengantarSurat = cetakPengantarSuratDao.save(pengantarSurat);
		}
		if(CommonUtil.isNotNullOrEmpty(resultPengantarSurat)){
			result.put("pengantarSurat", resultPengantarSurat.getNoRec());
		}
		return result;
	}
	
	
}
