package com.jasamedika.medifirst2000.service.impl;

import java.util.ArrayList;
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.DataPesertaPerusahanYangBekerjaSamaDao;
import com.jasamedika.medifirst2000.entities.DataPerusahaanYangBekerjaSama;
import com.jasamedika.medifirst2000.entities.DataPesertaPerusahanYangBekerjaSama;
import com.jasamedika.medifirst2000.entities.JenisKelamin;
import com.jasamedika.medifirst2000.service.DataPesertaPerusahanYangBekerjaSamaService;
import com.jasamedika.medifirst2000.util.CommonUtil;
import com.jasamedika.medifirst2000.vo.DataPerusahaanYangBekerjaSamaVO;
import com.jasamedika.medifirst2000.vo.DataPesertaPerusahanYangBekerjaSamaVO;
import com.jasamedika.medifirst2000.vo.JenisKelaminVO;

@Service("DataPesertaPerusahanYangBekerjaSamaService")
public class DataPesertaPerusahanYangBekerjaSamaServiceImpl implements DataPesertaPerusahanYangBekerjaSamaService {
	
	@Autowired
	private DataPesertaPerusahanYangBekerjaSamaDao dataPesertaPerusahanYangBekerjaSamaDao;
	
	@Autowired
	private BaseConverterImpl<DataPesertaPerusahanYangBekerjaSamaVO, DataPesertaPerusahanYangBekerjaSama> dataPesertaPerusahanYangBekerjaSamaConverter;
	
	@Autowired
	private BaseConverterImpl<JenisKelaminVO, JenisKelamin> jenisKelaminConverter;
	
	@Autowired
	private BaseConverterImpl<DataPerusahaanYangBekerjaSamaVO, DataPerusahaanYangBekerjaSama> dataPerusahaanYangBekerjaSamaConverter;
	
	@Override
	public Map<String, Object> addDataPesertaPerusahanYangBekerjaSama(DataPesertaPerusahanYangBekerjaSamaVO vo) {
		DataPesertaPerusahanYangBekerjaSama model = new DataPesertaPerusahanYangBekerjaSama();
		if(CommonUtil.isNotNullOrEmpty(vo)){
			model = dataPesertaPerusahanYangBekerjaSamaConverter.transferVOToModel(vo, new DataPesertaPerusahanYangBekerjaSama());
		}
		if(CommonUtil.isNotNullOrEmpty(vo.getJenisKelamin())){
			model.setJenisKelamin(jenisKelaminConverter.transferVOToModel(vo.getJenisKelamin(), new JenisKelamin()));
		}
		if(CommonUtil.isNotNullOrEmpty(vo.getDataPerusahaanYangBekerjaSama())){
			model.setDataPerusahaanYangBekerjaSama(dataPerusahaanYangBekerjaSamaConverter.transferVOToModel(vo.getDataPerusahaanYangBekerjaSama(), new DataPerusahaanYangBekerjaSama()));
		}
		DataPesertaPerusahanYangBekerjaSama resultModel = dataPesertaPerusahanYangBekerjaSamaDao.save(model);
		Map<String, Object> result = new HashMap<>();
		if(CommonUtil.isNotNullOrEmpty(resultModel)){
			result.put("jenisKelamin", resultModel.getJenisKelamin().getId());
			result.put("dataPerusahaanYangBekerjaSama", resultModel.getDataPerusahaanYangBekerjaSama().getNoRec());
			result.put("namaPeserta", resultModel.getNamaPeserta());
			result.put("jumlahKeluarga", resultModel.getJumlahKeluarga());
			result.put("plafonYangDijamin", resultModel.getPlafonYangDijamin());
			result.put("alamat", resultModel.getAlamat());
			result.put("noTlp", resultModel.getNoTlp());
			result.put("statusEnabled", resultModel.statusEnabled);
			result.put("noRec", resultModel.getNoRec());
		}
		return result;	}

	@Override
	public Map<String, Object> updateDataPesertaPerusahanYangBekerjaSama(DataPesertaPerusahanYangBekerjaSamaVO vo) {
		DataPesertaPerusahanYangBekerjaSama model = new DataPesertaPerusahanYangBekerjaSama();
		if(CommonUtil.isNotNullOrEmpty(vo)){
			model = dataPesertaPerusahanYangBekerjaSamaConverter.transferVOToModel(vo, new DataPesertaPerusahanYangBekerjaSama());
		}
		if(CommonUtil.isNotNullOrEmpty(vo.getJenisKelamin())){
			model.setJenisKelamin(jenisKelaminConverter.transferVOToModel(vo.getJenisKelamin(), new JenisKelamin()));
		}
		DataPesertaPerusahanYangBekerjaSama resultModel = dataPesertaPerusahanYangBekerjaSamaDao.save(model);
		Map<String, Object> result = new HashMap<>();
		if(CommonUtil.isNotNullOrEmpty(resultModel)){
			result.put("data", resultModel);
		}
		return result;
	}

	@Override
	public Map<String, Object> findAllDataPesertaPerusahanYangBekerjaSama() {
		List<DataPesertaPerusahanYangBekerjaSama> list = new ArrayList<DataPesertaPerusahanYangBekerjaSama>();
		Map<String, Object> result = new HashMap<String,Object>();
		list = (List<DataPesertaPerusahanYangBekerjaSama>) dataPesertaPerusahanYangBekerjaSamaDao.findAll();
		
		if(CommonUtil.isNotNullOrEmpty(list)){
			result.put("data", list);
			result.put("dataFound", true);
		}else{
			result.put("dataFound", false);
		}
		
		return result;
	}
	
	@Override
	public Map<String, Object> findAllDataPesertaRumahSakitYangBekerjaSama() {
		List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
		Map<String, Object> result = new HashMap<String, Object>();
		list = dataPesertaPerusahanYangBekerjaSamaDao.getDataPesertaRumahSakitYangBekerjaSama();
		
		if(CommonUtil.isNotNullOrEmpty(list)){
			result.put("data", list);
			result.put("dataFound", true);
		}else{
			result.put("dataFound", false);
		}
		
		return result;
	}
	
	@Override
	public Map<String, Object> findAllDataRumahSakitYangBekerjaSama() {
		List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
		Map<String, Object> result = new HashMap<String, Object>();
		list = dataPesertaPerusahanYangBekerjaSamaDao.getDataRumahSakitYangBekerjaSama();
		
		if(CommonUtil.isNotNullOrEmpty(list)){
			result.put("data", list);
			result.put("dataFound", true);
		}else{
			result.put("dataFound", false);
		}
		
		return result;
	}
	
	@Override
	public Map<String, Object> findAllDataPesertaAsuransiYangBekerjaSama() {
		List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
		Map<String, Object> result = new HashMap<String, Object>();
		list = dataPesertaPerusahanYangBekerjaSamaDao.getDataPesertaAsuransiYangBekerjaSama();
		
		if(CommonUtil.isNotNullOrEmpty(list)){
			result.put("data", list);
			result.put("dataFound", true);
		}else{
			result.put("dataFound", false);
		}
		
		return result;
	}

	@Override
	public Map<String, Object> findAllDataAsuransiYangBekerjaSama() {
		List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
		Map<String, Object> result = new HashMap<String, Object>();
		list = dataPesertaPerusahanYangBekerjaSamaDao.getDataAsuransiYangBekerjaSama();
		
		if(CommonUtil.isNotNullOrEmpty(list)){
			result.put("data", list);
			result.put("dataFound", true);
		}else{
			result.put("dataFound", false);
		}
		
		return result;
	}

	@Override
	public Map<String, Object> addallDataPesertaPerusahanYangBekerjaSama(List<DataPesertaPerusahanYangBekerjaSamaVO> vos) {
		for(DataPesertaPerusahanYangBekerjaSamaVO vo : vos){
			DataPesertaPerusahanYangBekerjaSama model = new DataPesertaPerusahanYangBekerjaSama();
			if(CommonUtil.isNotNullOrEmpty(vo)){
				model = dataPesertaPerusahanYangBekerjaSamaConverter.transferVOToModel(vo, new DataPesertaPerusahanYangBekerjaSama());
			}
			if(CommonUtil.isNotNullOrEmpty(vo.getJenisKelamin())){
				model.setJenisKelamin(jenisKelaminConverter.transferVOToModel(vo.getJenisKelamin(), new JenisKelamin()));
			}
			if(CommonUtil.isNotNullOrEmpty(vo.getDataPerusahaanYangBekerjaSama())){
				model.setDataPerusahaanYangBekerjaSama(dataPerusahaanYangBekerjaSamaConverter.transferVOToModel(vo.getDataPerusahaanYangBekerjaSama(), new DataPerusahaanYangBekerjaSama()));
			}
			DataPesertaPerusahanYangBekerjaSama resultModel = dataPesertaPerusahanYangBekerjaSamaDao.save(model);
		}
		Map<String, Object> result = new HashMap<>();
		result.put("status", "Success");
		return result;
	}

	@Override
	public Map<String, Object> findDataPesertaByDataPerusahaan(String noRec) {
		List<DataPesertaPerusahanYangBekerjaSama> list = new ArrayList<DataPesertaPerusahanYangBekerjaSama>();
		Map<String, Object> result = new HashMap<String,Object>();
		list = (List<DataPesertaPerusahanYangBekerjaSama>) dataPesertaPerusahanYangBekerjaSamaDao.getDataPesertaByDataPerusahaan(noRec);
		
		if(CommonUtil.isNotNullOrEmpty(list)){
			result.put("data", list);
			result.put("dataFound", true);
		}else{
			result.put("dataFound", false);
		}
		return result;
	}
	
}
