package com.infinite.focus.server.fcm.service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

import com.infinite.focus.server.fcm.model.PushNotification;

@Service
public class PushNotificationService {
	
	private Logger logger = LoggerFactory.getLogger(PushNotificationService.class);

	private FCMService fcmService;

	public PushNotificationService(FCMService fcmService) {
		this.fcmService = fcmService;
	}
	
	@Async
	public void sendPushNotification(PushNotification request) {
		try {
			fcmService.sendMessage(getSamplePayloadData(request), request);
		} catch (Exception e) {
			logger.error(e.getMessage());
		}
	}
	
	@Async
	public void sendPushNotifications(List<PushNotification> pushNotifications) {
		try {
			fcmService.sendMessages(getSamplePayloadData(pushNotifications.get(0)), pushNotifications);
		} catch (Exception e) {
			logger.error(e.getMessage());
		}
	}

	@Async
	public void sendPushNotificationWithoutData(PushNotification request) {
		try {
			fcmService.sendMessageWithoutData(request);
		} catch (Exception e) {
			logger.error(e.getMessage());
		}
	}

	@Async
	public void sendPushNotificationToToken(PushNotification request) {
		try {
			fcmService.sendMessageToToken(request);
		} catch (Exception e) {
			logger.error(e.getMessage());
		}
	}

	private Map<String, String> getSamplePayloadData(PushNotification request) {
		Map<String, String> pushData = new HashMap<>();
		pushData.put("messageId", "msgid");
		pushData.put("title", request.getTitle());
		pushData.put("message", request.getMessage());
		pushData.put("screen_type", request.getScreen_type().toString());
		return pushData;
	}
}
