package com.jasamedika.medifirst2000.service.impl;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.jasamedika.medifirst2000.converter.BaseConverterImpl;
import com.jasamedika.medifirst2000.dao.IpsrsMaintenanceDao;
import com.jasamedika.medifirst2000.dao.IpsrsPerbaikanDao;
import com.jasamedika.medifirst2000.dao.RuanganDao;
import com.jasamedika.medifirst2000.dao.custom.IpsrsMaintenanceDaoCustom;
import com.jasamedika.medifirst2000.entities.IpsrsKalibrasi;
import com.jasamedika.medifirst2000.entities.IpsrsKontakService;
import com.jasamedika.medifirst2000.entities.IpsrsMaintenance;
import com.jasamedika.medifirst2000.entities.IpsrsTeknisiKalibrasi;
import com.jasamedika.medifirst2000.entities.IpsrsTeknisiKontakService;
import com.jasamedika.medifirst2000.entities.IpsrsTeknisiPemeliharaan;
import com.jasamedika.medifirst2000.entities.IpsrsPemeliharaan;
import com.jasamedika.medifirst2000.entities.Pegawai;
import com.jasamedika.medifirst2000.entities.RegistrasiAset;
import com.jasamedika.medifirst2000.entities.Rekanan;
import com.jasamedika.medifirst2000.entities.Ruangan;
import com.jasamedika.medifirst2000.service.IpsrsMaintenanceService;
import com.jasamedika.medifirst2000.util.CommonUtil;
import com.jasamedika.medifirst2000.util.DateUtil;
import com.jasamedika.medifirst2000.vo.IpsrsKalibrasiVO;
import com.jasamedika.medifirst2000.vo.IpsrsKontakServiceVO;
import com.jasamedika.medifirst2000.vo.IpsrsTeknisiKalibrasiVO;
import com.jasamedika.medifirst2000.vo.IpsrsTeknisiKontakServiceVO;
import com.jasamedika.medifirst2000.vo.IpsrsTeknisiPemeliharaanVO;
import com.jasamedika.medifirst2000.vo.IpsrsMaintenanceVO;
import com.jasamedika.medifirst2000.vo.IpsrsPemeliharaanVO;
import com.jasamedika.medifirst2000.vo.PegawaiVO;
import com.jasamedika.medifirst2000.vo.RegistrasiAsetVO;
import com.jasamedika.medifirst2000.vo.RekananVO;
import com.jasamedika.medifirst2000.vo.RuanganVO;

@Service("ipsrsMaintenanceService")
public class IpsrsMaintenanceServiceImpl implements IpsrsMaintenanceService{
	
	@Autowired
	private IpsrsPerbaikanDao ipsrsPerbaikanDao;
	
	@Autowired
	private IpsrsMaintenanceDao ipsrsMaintenanceDao;
	
	@Autowired
	private IpsrsMaintenanceDaoCustom ipsrsMaintenanceDaoCustom;
	
	@Autowired
	private BaseConverterImpl <RegistrasiAsetVO, RegistrasiAset> registrasiAsetConverter;
	
	@Autowired
	private BaseConverterImpl <PegawaiVO, Pegawai> pegawaiConverter;
	
	@Autowired
	private BaseConverterImpl <IpsrsMaintenanceVO, IpsrsMaintenance> ipsrsMaintenanceConverter;
	
	@Autowired
	private BaseConverterImpl <IpsrsPemeliharaanVO, IpsrsPemeliharaan> ipsrsPemeliharaanConverter;
	
	@Autowired
	private BaseConverterImpl <IpsrsKontakServiceVO, IpsrsKontakService> ipsrsKontakServiceConverter;
	
	@Autowired
	private BaseConverterImpl <IpsrsKalibrasiVO, IpsrsKalibrasi> ipsrsKalibrasiConverter;
	
	@Autowired
	private BaseConverterImpl <IpsrsTeknisiPemeliharaanVO, IpsrsTeknisiPemeliharaan> ipsrsTeknisiPemeliharaanConverter;
	
	@Autowired
	private BaseConverterImpl <IpsrsTeknisiKontakServiceVO, IpsrsTeknisiKontakService> ipsrsTeknisiKontakServiceConverter;
	
	@Autowired
	private BaseConverterImpl <IpsrsTeknisiKalibrasiVO, IpsrsTeknisiKalibrasi> ipsrsTeknisiKalibrasiConverter;
	
	@Autowired
	private BaseConverterImpl <RekananVO, Rekanan> rekananConverter;
	
	@Autowired
	private BaseConverterImpl <RuanganVO, Ruangan> ruanganConverter;

	
	@Override
	public Map<String, Object> getRuanganMaintenance(){
		Map<String, Object> result = new HashMap<>();
		List<Map<String, Object>> listRuangan = ipsrsPerbaikanDao.getRuanganMaintenance();
		result.put("listRuangan", listRuangan);
		return result;
	}
	
	@Override
	public Map<String, Object> getAsetMaintenance(Integer id){
		Map<String, Object> result = new HashMap<>();
		List<Map<String, Object>> ipsrsPerbaikanDto = new ArrayList<>();
		if(CommonUtil.isNotNullOrEmpty(id)){
			for(Map<String, Object> mapping : ipsrsPerbaikanDao.getAllRegistrasiByRuangan(id)){
				if(CommonUtil.isNullOrEmpty(mapping.get("noRec"))){
					mapping.put("noRec", "-");
				} 
				if(CommonUtil.isNullOrEmpty(mapping.get("noSeri"))){
					mapping.put("noSeri", "-");
				} 
				if(CommonUtil.isNullOrEmpty(mapping.get("kdProduk"))){
					mapping.put("kdProduk", "-");
				}
				if(CommonUtil.isNullOrEmpty(mapping.get("namaProduk"))){
					mapping.put("namaProduk", "-");
				} 
				if(CommonUtil.isNullOrEmpty(mapping.get("merkProduk"))){
					mapping.put("merkProduk", "-");
				}
				if(CommonUtil.isNullOrEmpty(mapping.get("typeProduk"))){
					mapping.put("typeProduk", "-");
				}
				ipsrsPerbaikanDto.add(mapping);
			}
		}
		if(CommonUtil.isNotNullOrEmpty(ipsrsPerbaikanDto)){
			result.put("dataAset", ipsrsPerbaikanDto);
		}
		return result;
	}
	
	@Override
	public Map<String, Object> getTeknisiMaintenance(){
		Map<String, Object> result = new HashMap<>();
		List<Map<String, Object>> listTeknisi = ipsrsMaintenanceDao.getTeknisiMaintenance();
		result.put("listTeknisi", listTeknisi);
		return result;
	}
	
	@Override
	public Map<String, Object> getRekananMaintenance(){
		Map<String, Object> result = new HashMap<>();
		List<Map<String, Object>> listRekanan = ipsrsMaintenanceDao.getRekananMaintenance();
		result.put("listRekanan", listRekanan);
		return result;
	}
	
	@Override
	public Map<String, Object> saveMaintenance(IpsrsMaintenanceVO vo){
		Map<String, Object> result = new HashMap<>();
		IpsrsMaintenance ipsrsMaintenance = ipsrsMaintenanceConverter.transferVOToModel(vo, new IpsrsMaintenance());

		if(CommonUtil.isNotNullOrEmpty(vo.getIpsrsPemeliharaan().getJadwalPemeliharaan())){
			IpsrsPemeliharaan ipsrsPemeliharaan = ipsrsPemeliharaanConverter.transferVOToModel(vo.getIpsrsPemeliharaan(), new IpsrsPemeliharaan());
			
			if(CommonUtil.isNotNullOrEmpty(vo.getIpsrsPemeliharaan())){
				ipsrsPemeliharaan.setIpsrsMaintenance(ipsrsMaintenance);
			}
			if(CommonUtil.isNotNullOrEmpty(vo.getIpsrsPemeliharaan().getIpsrsTeknisiPemeliharaan())){
				Set<IpsrsTeknisiPemeliharaan> ipsrsTeknisiPemeliharaanSet = new HashSet<>();
				for(IpsrsTeknisiPemeliharaanVO modelVO : vo.getIpsrsPemeliharaan().getIpsrsTeknisiPemeliharaan()){
					IpsrsTeknisiPemeliharaan ipsrsTeknisiPemeliharaan = ipsrsTeknisiPemeliharaanConverter.transferVOToModel(modelVO, new IpsrsTeknisiPemeliharaan());
					
					if(CommonUtil.isNotNullOrEmpty(modelVO)){
						ipsrsTeknisiPemeliharaan.setIpsrsPemeliharaan(ipsrsPemeliharaan);
					}
					if(CommonUtil.isNotNullOrEmpty(modelVO.getTeknisi())){
						ipsrsTeknisiPemeliharaan.setTeknisi(pegawaiConverter.transferVOToModel(modelVO.getTeknisi(), new Pegawai()));
					}
					if(CommonUtil.isNotNullOrEmpty(ipsrsTeknisiPemeliharaan)){
						ipsrsTeknisiPemeliharaanSet.add(ipsrsTeknisiPemeliharaan);
					}
				}
				ipsrsPemeliharaan.setIpsrsTeknisiPemeliharaan(ipsrsTeknisiPemeliharaanSet);
			}
			if(CommonUtil.isNotNullOrEmpty(ipsrsPemeliharaan.getJadwalPemeliharaan())){
				Date datePemeliharaan = ipsrsPemeliharaan.getJadwalPemeliharaan();
				Long longDate = datePemeliharaan.getTime();
				Date date = new Date(longDate-((24 * 60 * 60 * 1000)*7));
				ipsrsPemeliharaan.setAlertPemeliharaan(date);
			}
			if(CommonUtil.isNotNullOrEmpty(ipsrsPemeliharaan)){
				ipsrsMaintenance.setIpsrsPemeliharaan(ipsrsPemeliharaan);
			}
		}
		if(CommonUtil.isNotNullOrEmpty(vo.getIpsrsKontakService().getJadwalKontakService())){
			IpsrsKontakService ipsrsKontakService = ipsrsKontakServiceConverter.transferVOToModel(vo.getIpsrsKontakService(), new IpsrsKontakService());
			
			if(CommonUtil.isNotNullOrEmpty(vo.getIpsrsKontakService())){
				ipsrsKontakService.setIpsrsMaintenance(ipsrsMaintenance);
			}
			if(CommonUtil.isNotNullOrEmpty(vo.getIpsrsKontakService().getIpsrsTeknisiKontakService())){
				Set<IpsrsTeknisiKontakService> ipsrsTeknisiKontakServiceSet = new HashSet<>();
				for(IpsrsTeknisiKontakServiceVO modelVO : vo.getIpsrsKontakService().getIpsrsTeknisiKontakService()){
					IpsrsTeknisiKontakService ipsrsTeknisiKontakService = ipsrsTeknisiKontakServiceConverter.transferVOToModel(modelVO, new IpsrsTeknisiKontakService());
					
					if(CommonUtil.isNotNullOrEmpty(modelVO)){
						ipsrsTeknisiKontakService.setIpsrsKontakService(ipsrsKontakService);
					}
					if(CommonUtil.isNotNullOrEmpty(modelVO.getTeknisi())){
						ipsrsTeknisiKontakService.setTeknisi(pegawaiConverter.transferVOToModel(modelVO.getTeknisi(), new Pegawai()));
					}
					if(CommonUtil.isNotNullOrEmpty(ipsrsTeknisiKontakService)){
						ipsrsTeknisiKontakServiceSet.add(ipsrsTeknisiKontakService);
					}
				}
				ipsrsKontakService.setIpsrsTeknisiKontakService(ipsrsTeknisiKontakServiceSet);
			}
			if(ipsrsKontakService.getJenisPeriode().equalsIgnoreCase("Tahunan")){
				String jadwal = ipsrsKontakService.getJadwalKontakService();
				try {
					SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
					Date dateFormat = formatter.parse(jadwal);
					Long longDate =dateFormat.getTime();
					Date date = new Date(longDate-((24 * 60 * 60 * 1000)*7));
					ipsrsKontakService.setAlertKontakService(formatter.format(date.toString()));
				} catch (ParseException e) {
					e.printStackTrace();
				}
			} else if(ipsrsKontakService.getJenisPeriode().equalsIgnoreCase("Bulanan")){
				String jadwal = ipsrsKontakService.getJadwalKontakService();
				if(jadwal.equalsIgnoreCase("Minggu ke-1")){
					ipsrsKontakService.setAlertKontakService("1-7");
				} else if(jadwal.equalsIgnoreCase("Minggu ke-2")){
					ipsrsKontakService.setAlertKontakService("8-14");
				} else if(jadwal.equalsIgnoreCase("Minggu ke-3")){
					ipsrsKontakService.setAlertKontakService("15-22");
				} else if(jadwal.equalsIgnoreCase("Minggu ke-4")){
					ipsrsKontakService.setAlertKontakService("23-akhir");
				}
			} else if(ipsrsKontakService.getJenisPeriode().equalsIgnoreCase("Mingguan")){
				String jadwal = ipsrsKontakService.getJadwalKontakService();
				if(jadwal.equalsIgnoreCase("Senin")){
					ipsrsKontakService.setAlertKontakService("Jumat");
				} else if(jadwal.equalsIgnoreCase("Selasa")){
					ipsrsKontakService.setAlertKontakService("Jumat");
				} else if(jadwal.equalsIgnoreCase("Rabu")){
					ipsrsKontakService.setAlertKontakService("Senin");
				} else if(jadwal.equalsIgnoreCase("Kamis")){
					ipsrsKontakService.setAlertKontakService("Selasa");
				} else if(jadwal.equalsIgnoreCase("Jumat")){
					ipsrsKontakService.setAlertKontakService("Rabu");
				} else if(jadwal.equalsIgnoreCase("Sabtu")){
					ipsrsKontakService.setAlertKontakService("Kamis");
				}
			}
			if(CommonUtil.isNotNullOrEmpty(vo.getIpsrsKontakService().getRekanan())){
				ipsrsKontakService.setRekanan(rekananConverter.transferVOToModel(vo.getIpsrsKontakService().getRekanan(), new Rekanan()));
			}
			
			if(CommonUtil.isNotNullOrEmpty(ipsrsKontakService)){
				ipsrsMaintenance.setIpsrsKontakService(ipsrsKontakService);
			}
		}
		if(CommonUtil.isNotNullOrEmpty(vo.getIpsrsKalibrasi().getJadwalKalibrasi())){
			IpsrsKalibrasi ipsrsKalibrasi = ipsrsKalibrasiConverter.transferVOToModel(vo.getIpsrsKalibrasi(), new IpsrsKalibrasi());
			
			if(CommonUtil.isNotNullOrEmpty(vo.getIpsrsKalibrasi())){
				ipsrsKalibrasi.setIpsrsMaintenance(ipsrsMaintenance);
			}
			if(CommonUtil.isNotNullOrEmpty(vo.getIpsrsKalibrasi().getIpsrsTeknisiKalibrasi())){
				Set<IpsrsTeknisiKalibrasi> ipsrsTeknisiKalibrasiSet = new HashSet<>();
				for(IpsrsTeknisiKalibrasiVO modelVO : vo.getIpsrsKalibrasi().getIpsrsTeknisiKalibrasi()){
					IpsrsTeknisiKalibrasi ipsrsTeknisiKalibrasi = ipsrsTeknisiKalibrasiConverter.transferVOToModel(modelVO, new IpsrsTeknisiKalibrasi());
					
					if(CommonUtil.isNotNullOrEmpty(modelVO)){
						ipsrsTeknisiKalibrasi.setIpsrsKalibrasi(ipsrsKalibrasi);
					}
					if(CommonUtil.isNotNullOrEmpty(modelVO.getTeknisi())){
						ipsrsTeknisiKalibrasi.setTeknisi(pegawaiConverter.transferVOToModel(modelVO.getTeknisi(), new Pegawai()));
					}
					if(CommonUtil.isNotNullOrEmpty(ipsrsTeknisiKalibrasi)){
						ipsrsTeknisiKalibrasiSet.add(ipsrsTeknisiKalibrasi);
					}
				}
				ipsrsKalibrasi.setIpsrsTeknisiKalibrasi(ipsrsTeknisiKalibrasiSet);
			}
			if(CommonUtil.isNotNullOrEmpty(ipsrsKalibrasi.getJadwalKalibrasi())){
				Date dateKalibrasi = ipsrsKalibrasi.getJadwalKalibrasi();
				Long longDate = dateKalibrasi.getTime();
				Date date = new Date(longDate-((24 * 60 * 60 * 1000)*7));
				ipsrsKalibrasi.setAlertKalibrasi(date);
			}
			if(CommonUtil.isNotNullOrEmpty(vo.getIpsrsKalibrasi().getRekanan())){
				ipsrsKalibrasi.setRekanan(rekananConverter.transferVOToModel(vo.getIpsrsKalibrasi().getRekanan(), new Rekanan()));
			}
			if(CommonUtil.isNotNullOrEmpty(ipsrsKalibrasi)){
				ipsrsMaintenance.setIpsrsKalibrasi(ipsrsKalibrasi);
			}
		}
		if(CommonUtil.isNotNullOrEmpty(vo.getRuangan())){
			ipsrsMaintenance.setRuangan(ruanganConverter.transferVOToModel(vo.getRuangan(), new Ruangan()));
		}
		if(CommonUtil.isNotNullOrEmpty(vo.getRegistrasiAset())){
			ipsrsMaintenance.setRegistrasiAset(registrasiAsetConverter.transferVOToModel(vo.getRegistrasiAset(), new RegistrasiAset()));
		}
		if(CommonUtil.isNotNullOrEmpty(ipsrsMaintenance)){
			IpsrsMaintenance ipsrsMaintenanceResult = ipsrsMaintenanceDao.save(ipsrsMaintenance);
			result.put("noRec", ipsrsMaintenanceResult.noRec);
		}
		return result;
	}
	
	public Map<String, Object> updateMaintenance(IpsrsMaintenanceVO vo){
		Map<String, Object> result = new HashMap<>();
		IpsrsMaintenance ipsrsMaintenance = ipsrsMaintenanceConverter.transferVOToModel(vo, new IpsrsMaintenance());
		
		if(CommonUtil.isNotNullOrEmpty(vo.getIpsrsPemeliharaan().getJadwalPemeliharaan())){
			IpsrsPemeliharaan ipsrsPemeliharaan = ipsrsPemeliharaanConverter.transferVOToModel(vo.getIpsrsPemeliharaan(), new IpsrsPemeliharaan());
			ipsrsMaintenanceDaoCustom.deleteIpsrsPemeliharaan(ipsrsMaintenance);
			
			if(CommonUtil.isNotNullOrEmpty(vo.getIpsrsPemeliharaan())){
				ipsrsPemeliharaan.setIpsrsMaintenance(ipsrsMaintenance);
			}
			
			if(CommonUtil.isNotNullOrEmpty(vo.getIpsrsPemeliharaan().getIpsrsTeknisiPemeliharaan())){
				Set<IpsrsTeknisiPemeliharaan> ipsrsTeknisiPemeliharaanSet = new HashSet<>();
				for(IpsrsTeknisiPemeliharaanVO modelVO : vo.getIpsrsPemeliharaan().getIpsrsTeknisiPemeliharaan()){
					IpsrsTeknisiPemeliharaan ipsrsTeknisiPemeliharaan = ipsrsTeknisiPemeliharaanConverter.transferVOToModel(modelVO, new IpsrsTeknisiPemeliharaan());
					
					if(CommonUtil.isNotNullOrEmpty(modelVO)){
						ipsrsTeknisiPemeliharaan.setIpsrsPemeliharaan(ipsrsPemeliharaan);
					}
					if(CommonUtil.isNotNullOrEmpty(modelVO.getTeknisi())){
						ipsrsTeknisiPemeliharaan.setTeknisi(pegawaiConverter.transferVOToModel(modelVO.getTeknisi(), new Pegawai()));
					}
					if(CommonUtil.isNotNullOrEmpty(ipsrsTeknisiPemeliharaan)){
						ipsrsTeknisiPemeliharaanSet.add(ipsrsTeknisiPemeliharaan);
					}
				}
				ipsrsPemeliharaan.setIpsrsTeknisiPemeliharaan(ipsrsTeknisiPemeliharaanSet);
			}
			
			if(CommonUtil.isNotNullOrEmpty(ipsrsPemeliharaan.getJadwalPemeliharaan())){
				Date datePemeliharaan = ipsrsPemeliharaan.getJadwalPemeliharaan();
				Long longDate = datePemeliharaan.getTime();
				Date date = new Date(longDate-((24 * 60 * 60 * 1000)*7));
				ipsrsPemeliharaan.setAlertPemeliharaan(date);
			}
			
			if(CommonUtil.isNotNullOrEmpty(ipsrsPemeliharaan)){
				ipsrsMaintenance.setIpsrsPemeliharaan(ipsrsPemeliharaan);
			}
		}
		
		if(CommonUtil.isNotNullOrEmpty(vo.getIpsrsKontakService().getJadwalKontakService())){
			IpsrsKontakService ipsrsKontakService = ipsrsKontakServiceConverter.transferVOToModel(vo.getIpsrsKontakService(), new IpsrsKontakService());
			ipsrsMaintenanceDaoCustom.deleteIpsrsKontakService(ipsrsMaintenance);
			
			if(CommonUtil.isNotNullOrEmpty(vo.getIpsrsKontakService())){
				ipsrsKontakService.setIpsrsMaintenance(ipsrsMaintenance);
			}
			if(CommonUtil.isNotNullOrEmpty(vo.getIpsrsKontakService().getIpsrsTeknisiKontakService())){
				Set<IpsrsTeknisiKontakService> ipsrsTeknisiKontakServiceSet = new HashSet<>();
				for(IpsrsTeknisiKontakServiceVO modelVO : vo.getIpsrsKontakService().getIpsrsTeknisiKontakService()){
					IpsrsTeknisiKontakService ipsrsTeknisiKontakService = ipsrsTeknisiKontakServiceConverter.transferVOToModel(modelVO, new IpsrsTeknisiKontakService());
					
					if(CommonUtil.isNotNullOrEmpty(modelVO)){
						ipsrsTeknisiKontakService.setIpsrsKontakService(ipsrsKontakService);
					}
					if(CommonUtil.isNotNullOrEmpty(modelVO.getTeknisi())){
						ipsrsTeknisiKontakService.setTeknisi(pegawaiConverter.transferVOToModel(modelVO.getTeknisi(), new Pegawai()));
					}
					if(CommonUtil.isNotNullOrEmpty(ipsrsTeknisiKontakService)){
						ipsrsTeknisiKontakServiceSet.add(ipsrsTeknisiKontakService);
					}
				}
				ipsrsKontakService.setIpsrsTeknisiKontakService(ipsrsTeknisiKontakServiceSet);
			}
			if(ipsrsKontakService.getJenisPeriode().equalsIgnoreCase("tahunan")){
				String jadwal = ipsrsKontakService.getJadwalKontakService();
				try {
					SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
					Date dateFormat = formatter.parse(jadwal);
					Long longDate =dateFormat.getTime();
					Date date = new Date(longDate-((24 * 60 * 60 * 1000)*7));
					ipsrsKontakService.setAlertKontakService(formatter.format(date.toString()));
				} catch (ParseException e) {
					e.printStackTrace();
				}
			} else if(ipsrsKontakService.getJenisPeriode().equalsIgnoreCase("bulanan")){
				String jadwal = ipsrsKontakService.getJadwalKontakService();
				if(jadwal.equalsIgnoreCase("Minggu ke-1")){
					ipsrsKontakService.setAlertKontakService("1-7");
				} else if(jadwal.equalsIgnoreCase("Minggu ke-2")){
					ipsrsKontakService.setAlertKontakService("8-14");
				} else if(jadwal.equalsIgnoreCase("Minggu ke-3")){
					ipsrsKontakService.setAlertKontakService("15-22");
				} else if(jadwal.equalsIgnoreCase("Minggu ke-4")){
					ipsrsKontakService.setAlertKontakService("23-akhir");
				}
			} else if(ipsrsKontakService.getJenisPeriode().equalsIgnoreCase("Mingguan")){
				String jadwal = ipsrsKontakService.getJadwalKontakService();
				if(jadwal.equalsIgnoreCase("Senin")){
					ipsrsKontakService.setAlertKontakService("Jumat");
				} else if(jadwal.equalsIgnoreCase("Selasa")){
					ipsrsKontakService.setAlertKontakService("Jumat");
				} else if(jadwal.equalsIgnoreCase("Rabu")){
					ipsrsKontakService.setAlertKontakService("Senin");
				} else if(jadwal.equalsIgnoreCase("Kamis")){
					ipsrsKontakService.setAlertKontakService("Selasa");
				} else if(jadwal.equalsIgnoreCase("Jumat")){
					ipsrsKontakService.setAlertKontakService("Rabu");
				} else if(jadwal.equalsIgnoreCase("Sabtu")){
					ipsrsKontakService.setAlertKontakService("Kamis");
				}
			}
			if(CommonUtil.isNotNullOrEmpty(vo.getIpsrsKontakService().getRekanan())){
				ipsrsKontakService.setRekanan(rekananConverter.transferVOToModel(vo.getIpsrsKontakService().getRekanan(), new Rekanan()));
			}
			
			if(CommonUtil.isNotNullOrEmpty(ipsrsKontakService)){
				ipsrsMaintenance.setIpsrsKontakService(ipsrsKontakService);
			}
		}
		
		if(CommonUtil.isNotNullOrEmpty(vo.getIpsrsKalibrasi().getJadwalKalibrasi())){
			IpsrsKalibrasi ipsrsKalibrasi = ipsrsKalibrasiConverter.transferVOToModel(vo.getIpsrsKalibrasi(), new IpsrsKalibrasi());
			ipsrsMaintenanceDaoCustom.deleteIpsrsKalibrasi(ipsrsMaintenance);
			
			if(CommonUtil.isNotNullOrEmpty(vo.getIpsrsKalibrasi())){
				ipsrsKalibrasi.setIpsrsMaintenance(ipsrsMaintenance);
			}
			if(CommonUtil.isNotNullOrEmpty(vo.getIpsrsKalibrasi().getIpsrsTeknisiKalibrasi())){
				Set<IpsrsTeknisiKalibrasi> ipsrsTeknisiKalibrasiSet = new HashSet<>();
				for(IpsrsTeknisiKalibrasiVO modelVO : vo.getIpsrsKalibrasi().getIpsrsTeknisiKalibrasi()){
					IpsrsTeknisiKalibrasi ipsrsTeknisiKalibrasi = ipsrsTeknisiKalibrasiConverter.transferVOToModel(modelVO, new IpsrsTeknisiKalibrasi());
					
					if(CommonUtil.isNotNullOrEmpty(modelVO)){
						ipsrsTeknisiKalibrasi.setIpsrsKalibrasi(ipsrsKalibrasi);
					}
					if(CommonUtil.isNotNullOrEmpty(modelVO.getTeknisi())){
						ipsrsTeknisiKalibrasi.setTeknisi(pegawaiConverter.transferVOToModel(modelVO.getTeknisi(), new Pegawai()));
					}
					if(CommonUtil.isNotNullOrEmpty(ipsrsTeknisiKalibrasi)){
						ipsrsTeknisiKalibrasiSet.add(ipsrsTeknisiKalibrasi);
					}
				}
				ipsrsKalibrasi.setIpsrsTeknisiKalibrasi(ipsrsTeknisiKalibrasiSet);
			}
			if(CommonUtil.isNotNullOrEmpty(vo.getIpsrsKalibrasi().getRekanan())){
				ipsrsKalibrasi.setRekanan(rekananConverter.transferVOToModel(vo.getIpsrsKontakService().getRekanan(), new Rekanan()));
			}
			if(CommonUtil.isNotNullOrEmpty(ipsrsKalibrasi.getJadwalKalibrasi())){
				Date dateKalibrasi = ipsrsKalibrasi.getJadwalKalibrasi();
				Long longDate = dateKalibrasi.getTime();
				Date date = new Date(longDate-((24 * 60 * 60 * 1000)*7));
				ipsrsKalibrasi.setAlertKalibrasi(date);
			}
			if(CommonUtil.isNotNullOrEmpty(ipsrsKalibrasi)){
				ipsrsMaintenance.setIpsrsKalibrasi(ipsrsKalibrasi);
			}
		}
		if(CommonUtil.isNotNullOrEmpty(vo.getRuangan())){
			ipsrsMaintenance.setRuangan(ruanganConverter.transferVOToModel(vo.getRuangan(), new Ruangan()));
		}
		if(CommonUtil.isNotNullOrEmpty(vo.getRegistrasiAset())){
			ipsrsMaintenance.setRegistrasiAset(registrasiAsetConverter.transferVOToModel(vo.getRegistrasiAset(), new RegistrasiAset()));
		}
		if(CommonUtil.isNotNullOrEmpty(ipsrsMaintenance)){
			IpsrsMaintenance ipsrsMaintenanceResult = ipsrsMaintenanceDao.save(ipsrsMaintenance);
			result.put("noRec", ipsrsMaintenanceResult.noRec);
		}
		return result;
	}
	
	@Override
	public Map<String, Object> getJadwalPemeliharaan() {
		Map<String, Object> result = new HashMap<>();
		List<Map<String, Object>> listJadwalMaintenance = new ArrayList<>();
		
		List<Map<String, Object>> listJadwalPemeliharaanSet = ipsrsMaintenanceDao.getJadwalPemeliharaan();
		List<Map<String, Object>> listPendampingPemeliharaanSet = null;
		for(Map<String, Object> jadwalPemeliharaan : listJadwalPemeliharaanSet){
			listPendampingPemeliharaanSet = ipsrsMaintenanceDao.getPendampingPemeliharaan((String)jadwalPemeliharaan.get("noRecPemeliharaan"));
			
			StringBuilder builderTeknisi = new StringBuilder();
			for(Map<String, Object> dataTeknisi : listPendampingPemeliharaanSet){
				builderTeknisi.append(dataTeknisi.get("namaLengkap")+", ");
			}
			
			if(CommonUtil.isNotNullOrEmpty(jadwalPemeliharaan)){
				jadwalPemeliharaan.put("teknisiPendampingGrid", builderTeknisi.toString());
				jadwalPemeliharaan.put("listTeknisiPendamping", listPendampingPemeliharaanSet);
				listJadwalMaintenance.add(jadwalPemeliharaan);
			}
		}
		if(CommonUtil.isNotNullOrEmpty(listJadwalMaintenance)){
			result.put("listJadwalMaintenance", listJadwalMaintenance);
		}
		return result;
	}
	
	@Override
	public Map<String, Object> getJadwalKontakService() {
		Map<String, Object> result = new HashMap<>();
		List<Map<String, Object>> listJadwalMaintenance = new ArrayList<>();
		
		List<Map<String, Object>> listJadwalKontakServiceSet = ipsrsMaintenanceDao.getJadwalKontakService();
		List<Map<String, Object>> listPendampingKontakServiceSet = null;
		for(Map<String, Object> jadwalKontakService : listJadwalKontakServiceSet){
			listPendampingKontakServiceSet = ipsrsMaintenanceDao.getPendampingKontakService((String)jadwalKontakService.get("noRecKontakService"));
			
			StringBuilder builderTeknisi = new StringBuilder();
			for(Map<String, Object> dataTeknisi : listPendampingKontakServiceSet){
				builderTeknisi.append(dataTeknisi.get("namaLengkap")+", ");
			}
			
			if(CommonUtil.isNotNullOrEmpty(jadwalKontakService)){
				jadwalKontakService.put("teknisiPendampingGrid", builderTeknisi.toString());
				jadwalKontakService.put("listTeknisiPendamping", listPendampingKontakServiceSet);
				listJadwalMaintenance.add(jadwalKontakService);
			}
		}
		if(CommonUtil.isNotNullOrEmpty(listJadwalMaintenance)){
			result.put("listJadwalMaintenance", listJadwalMaintenance);
		}
		return result;
	}
	
	@Override
	public Map<String, Object> getJadwalKalibrasi() {
		Map<String, Object> result = new HashMap<>();
		List<Map<String, Object>> listJadwalMaintenance = new ArrayList<>();
		
		List<Map<String, Object>> listJadwalKalibrasiSet = ipsrsMaintenanceDao.getJadwalKalibrasi();
		List<Map<String, Object>> listPendampingKalibrasiSet = null;
		for(Map<String, Object> jadwalKalibrasi : listJadwalKalibrasiSet){
			listPendampingKalibrasiSet = ipsrsMaintenanceDao.getPendampingKalibrasi((String)jadwalKalibrasi.get("noRecKalibrasi"));
			
			StringBuilder builderTeknisi = new StringBuilder();
			for(Map<String, Object> dataTeknisi : listPendampingKalibrasiSet){
				builderTeknisi.append(dataTeknisi.get("namaLengkap")+", ");
			}
			
			if(CommonUtil.isNotNullOrEmpty(jadwalKalibrasi)){
				jadwalKalibrasi.put("teknisiPendampingGrid", builderTeknisi.toString());
				jadwalKalibrasi.put("listTeknisiPendamping", listPendampingKalibrasiSet);
				listJadwalMaintenance.add(jadwalKalibrasi);
			}
		}
		if(CommonUtil.isNotNullOrEmpty(listJadwalMaintenance)){
			result.put("listJadwalMaintenance", listJadwalMaintenance);
		}
		return result;
	}
	
	@Override
	public Map<String, Object> getAllAsetMaintenance(){
		Map<String, Object> result = new HashMap<>();
		List<Map<String, Object>> ipsrsMaintenance = new ArrayList<>();
		for(Map<String, Object> listMap : ipsrsMaintenanceDao.getAllAsetMaintenance()){
			if(CommonUtil.isNullOrEmpty(listMap.get("noRec"))){
				listMap.remove("noRec");
				listMap.put("noRec", "-");
			} 
			if(CommonUtil.isNullOrEmpty(listMap.get("noSeri"))){
				listMap.remove("noSeri");
				listMap.put("noSeri", "-");
			} 
			if(CommonUtil.isNullOrEmpty(listMap.get("namaProduk"))){
				listMap.remove("namaProduk");
				listMap.put("namaProduk", "-");
			} 
			if(CommonUtil.isNullOrEmpty(listMap.get("merkProduk"))){
				listMap.remove("merkProduk");
				listMap.put("merkProduk", "-");
			}
			if(CommonUtil.isNullOrEmpty(listMap.get("typeProduk"))){
				listMap.remove("typeProduk");
				listMap.put("typeProduk", "-");
			}
			ipsrsMaintenance.add(listMap);
		}
		if(CommonUtil.isNotNullOrEmpty(ipsrsMaintenance)){
			result.put("dataAset", ipsrsMaintenance);
		}
		return result; 
	}

	@SuppressWarnings("deprecation")
	@Override
	public Map<String, Object> getAlertMaintenance(){	
		Map<String, Object> result = new HashMap<>();
		
		String[] dayNameArray = {"Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"};
		String alertKontakService = null;
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		
		String dayName = dayNameArray[DateUtil.now().getDay()];
		System.out.println(dayName);
		String dateNumber = String.valueOf(DateUtil.now().getDate());
		String dateFullFormat = format.format(DateUtil.now().getTime());
		
		List<Map<String, Object>> listAlertPemeliharaan = ipsrsMaintenanceDao.getAlertPemeliharaan(dateFullFormat);
		if(CommonUtil.isNotNullOrEmpty(listAlertPemeliharaan)){
			List<Map<String, Object>> listData = new ArrayList<>();
			for(Map<String, Object> data : listAlertPemeliharaan){
				listData.add(data);
			}
			if(CommonUtil.isNotNullOrEmpty(listData)){
				result.put("listAlertPemeliharaan", listData);
			}
		}
		
		//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
		if(dateNumber.equalsIgnoreCase("1")){
			alertKontakService = "1-7";
		} else if(dateNumber.equalsIgnoreCase("8")){
			alertKontakService = "8-14";
		} else if(dateNumber.equalsIgnoreCase("15")){
			alertKontakService = "15-22";
		} else if(dateNumber.equalsIgnoreCase("23")){
			alertKontakService = "23-akhir";
		} 
		
		if(CommonUtil.isNotNullOrEmpty(alertKontakService)){
			List<Map<String, Object>> listKontakService = ipsrsMaintenanceDao.getAlertKontakService(dayName, alertKontakService, dateFullFormat);
			if(CommonUtil.isNotNullOrEmpty(listKontakService)){
				result.put("listAlertKontakService", listKontakService);
			}
		} else{
			List<Map<String, Object>> listKontakService = ipsrsMaintenanceDao.getAlertKontakService(dayName, "", dateFullFormat);
			if(CommonUtil.isNotNullOrEmpty(listKontakService)){
				result.put("listAlertKontakService", listKontakService);
			}
		}
		
		//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

		List<Map<String, Object>> listAlertKalibrasi = ipsrsMaintenanceDao.getAlertKalibrasi(dateFullFormat);
		if(CommonUtil.isNotNullOrEmpty(listAlertKalibrasi)){
			result.put("listAlertKalibrasi", listAlertKalibrasi);
		}
		
		return result;
	}
	
	//KEHADIRAN
	public void updateStatusPemeliharaan(String noRec){
		ipsrsMaintenanceDaoCustom.updateStatusPemeliharaan(noRec);
	}
	
	public void updateStatusKontakService(String noRec){
		ipsrsMaintenanceDaoCustom.updateStatusKontakService(noRec);
	}
	
	public void updateStatusKalibrasi(String noRec){
		ipsrsMaintenanceDaoCustom.updateKalibrasi(noRec);
	}
	
}
