package com.jasamedika.medifirst2000.asynctask;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.jasamedika.medifirst2000.controller.base.LocaleController;
import com.jasamedika.medifirst2000.dao.PegawaiDao;
import com.jasamedika.medifirst2000.dao.RuanganDao;
import com.jasamedika.medifirst2000.notification.MessagePublisher;
import com.jasamedika.medifirst2000.service.NotifMessagingSchedulerService;
import com.jasamedika.medifirst2000.service.NotifMessagingService;
import com.jasamedika.medifirst2000.service.NotifikasiMessageObjekModulService;
import com.jasamedika.medifirst2000.vo.NotifMessagingSchedulerVO;
import com.jasamedika.medifirst2000.vo.NotifMessagingVO;
import com.jasamedika.medifirst2000.vo.NotifikasiMessageObjekModulVO;

@Component
public class NotificationSchedulerMaintenanceTask extends LocaleController<NotifMessagingSchedulerVO>{
/*	
	private final Logger LOG = LoggerFactory.getLogger(NotificationSchedulerMaintenanceTask.class);

	@Autowired
	NotifMessagingSchedulerService<NotifMessagingSchedulerVO> notifMessagingSchedulerService;
	
	@Autowired
	NotifMessagingService<NotifMessagingVO> notifMessagingService;
	
	@Autowired
	NotifikasiMessageObjekModulService<NotifikasiMessageObjekModulVO> notifikasiMessageObjekModulService;
		
	@Autowired
	MessagePublisher<String, Object> messagePublisher;
	
	@Autowired
	PegawaiDao pegawaiDao;
	
	@Autowired 
	RuanganDao ruanganDao;
*/	
//	@Scheduled(cron = "0 30 7 * * *")
//	public void NotificationNormalMaintenanceEvery730AM(){
//		try{
//		MessagePublisher.RabbitHole rabbitHole = messagePublisher.getRabbitHole();
//		
//		List<NotifMessagingSchedulerVO> lNotif = notifMessagingSchedulerService.allNotifBelumTerkirim(new Date());
//		
//		if (CommonUtil.isNullOrEmpty(lNotif)){
//			LOG.info(DateUtil.now()+" task scheduler : tidak ada jadwal maintenance");
//			return; 
//		}
//		
//		Map<Integer, Integer> pegawaiRuangaAsal = new HashMap<>();
//		
//		Map<Integer, List<Integer>> ruanganAsalAll = new HashMap<>();
//		Map<Integer, List<Integer>> notifMapAllRuanganTujuan = new HashMap<>();
//		List<Integer> notifsId = new ArrayList<>();
//		List<Integer> ruanganTujuansId = new ArrayList<>();
//		
//		Integer oldNotifId = 0;
//		Integer oldRuanganIdTujuan = 0;
//		
//		for (NotifMessagingSchedulerVO notif:lNotif){
//			
//			if (notif.getRuanganIdTujuan().intValue() != oldRuanganIdTujuan.intValue()){
//				ruanganTujuansId = new ArrayList<>();
//				oldRuanganIdTujuan = notif.getRuanganIdTujuan();
//			}
//			ruanganTujuansId.add(notif.getRuanganIdTujuan());
//			notifMapAllRuanganTujuan.put(notif.getNotifMessagingId(), ruanganTujuansId);
//			
//			if (notif.getNotifMessagingId().intValue() != oldNotifId.intValue()){
//				notifsId = new ArrayList<>();
//				oldNotifId = notif.getNotifMessagingId();
//			}
//			
//			notifsId.add(notif.getNotifMessagingId());			
//			ruanganAsalAll.put(notif.getRuanganIdAsal(), notifsId);
//			
//			pegawaiRuangaAsal.put(notif.getRuanganIdAsal(), notif.getPegawaiId());
//		}
//		
//		Set<Integer> ruanganAsalIds = ruanganAsalAll.keySet();
//		
//		for(Integer ruanganAsalId:ruanganAsalIds){
//			
//			Integer pegawaiId = pegawaiRuangaAsal.get(ruanganAsalId);
//			Pegawai pegawai = pegawaiDao.findById(pegawaiId);
//			Ruangan ruanganAsal = ruanganDao.findById(ruanganAsalId);
//
//			notifsId = ruanganAsalAll.get(ruanganAsalId);
//			
//			for (Integer notifMessagingId:notifsId ){
//				
//				ruanganTujuansId = notifMapAllRuanganTujuan.get(notifMessagingId);
//				
//				try{
//					rabbitHole.sendNotif(rabbitHole, ruanganAsal, pegawai, notifikasiMessageObjekModulService, notifMessagingId, ruanganTujuansId);
//				}catch(Exception e){
//					LOG.info(DateUtil.now()+" task scheduler dari Ruangan {} dengan ruanganId {} pada notifMessageId {} ada masalah {}", 
//							ruanganAsal.getNamaRuangan(), ruanganAsalId, notifMessagingId, e.getMessage());
//				}
//			}
//		}
//		}catch(Exception e){
//			LOG.info(DateUtil.now() + "Task scheduler gagal penyebab, {} ", e.getMessage());
//			//e.printStackTrace();
//		}
//	}
}



//private void sendNotif(Gson gson, String urlSocket, MessagePublisher.RabbitHole rabbitHole, Integer pegawaiId, Integer ruanganId, Integer notifMessagingId, List<Integer>  ruanganTujuansId) throws Exception{
//
//List<NotifikasiMessageObjekModulVO> notifikasiMessageObjekModulVOs = notifikasiMessageObjekModulService.findByNotifMessagingIdAndRuanganId(notifMessagingId, ruanganTujuansId);
//
//if (CommonUtil.isNullOrEmpty(notifikasiMessageObjekModulVOs)) {
//	return;
//}
//
//Integer ruanganIdtemp = 0;
//boolean connect = false;
//
//PegawaiVO pegawai = pegawaiService.findById(pegawaiId);
//
//for (NotifikasiMessageObjekModulVO vo : notifikasiMessageObjekModulVOs){
//	Ruangan ruangan = vo.getRuangan();
//	ModulAplikasi modulAplikasi = vo.getModulAplikasi();
//	ObjekModulAplikasi objekModulAplikasi = vo.getObjekModulAplikasi();
//	String customURLObjekModul = vo.getCustomURLObjekModul();
//	String titleNotifikasi = vo.getTitleNotifikasi();
//	String pesanNotifikasi = vo.getPesanNotifikasi();
//	String namaFungsiFrontEnd = vo.getNamaFungsiFrontEnd();
//	
//	if (ruangan.getId() ==  ruanganId){
//		continue;
//	}
//	
//	RuanganVO dariRuangan = ruanganService.findById(ruanganId);
//	
//	if (ruanganIdtemp != ruangan.getId()){		
//		if (connect){
//			rabbitHole.close();
//		}
//		rabbitHole.connect(urlSocket, String.valueOf(ruangan.getId()));
//		connect = true;
//		ruanganIdtemp = ruangan.getId();
//	}
//	
//	Map<String, Object> map = new HashMap<>();
//	map.put("title", titleNotifikasi);
//	map.put("dariRuangan", dariRuangan);
//	map.put("ruanganId", ruangan.getId());
//	map.put("ruangan", ruangan);
//	map.put("modulAplikasi", modulAplikasi);
//	map.put("objekModulAplikasi", objekModulAplikasi);
//	map.put("titleNotifikasi", titleNotifikasi);
//	map.put("pesanNotifikasi", pesanNotifikasi);
//	map.put("namaFungsiFrontEnd", namaFungsiFrontEnd);
//	map.put("fromPegawai", pegawai);
//	map.put("urlForm",CommonUtil.isNullOrEmpty(customURLObjekModul)? objekModulAplikasi.getAlamatUrlForm() : customURLObjekModul);
//						
//	rabbitHole.sendRabbitMQNotification(gson.toJson(map));
//
//	//messagePublisher.BroadcastMessage(map);
//}
//if (connect){
//	rabbitHole.close();
//}
//
//}