package com.indigitall.cordova.services;

import android.content.Context;

import com.google.firebase.messaging.RemoteMessage;
import com.indigitall.android.commons.utils.Log;
import com.indigitall.android.push.models.Push;
import com.indigitall.android.push.services.FirebaseMessagingService;
import com.indigitall.android.push.utils.FirebaseUtils;
import com.indigitall.android.push.utils.PushPreferenceUtils;
import com.indigitall.android.push.utils.PushValidations;
import com.indigitall.android.push.utils.ServiceUtils;
import com.indigitall.android.push.utils.PushServiceUtils;
import com.indigitall.cordova.views.CDVPushNotification;
import com.indigitall.cordova.CordovaIndigitall;

import org.json.JSONException;
import org.json.JSONObject;
import java.util.Map;

public class IndigitallCDVFirebaseMessagingService extends FirebaseMessagingService{
    Push push;
    private static final String TAG = "[IND][FCM]IndigitallCDVFirebaseMessagingService";
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        //super.onMessageReceived(remoteMessage);
        Log log = new Log(TAG,getApplicationContext());

        log.d("From: " + remoteMessage.getFrom() + "\nTo: " + remoteMessage.getTo())
                .writeLog();
        Map<String, String> data = remoteMessage.getData();
        JSONObject jsonObject = new JSONObject(data);
        try {
            log.i("Data: " + jsonObject.toString(4)).writeLog();
        } catch (JSONException e) {
            throw new RuntimeException(e);
        }
        if (CordovaIndigitall.indigitallInterface != null) {
            CordovaIndigitall.indigitallInterface.onIndigitallMessageReceived(this, jsonObject, null);
        }
        Context context= getApplicationContext();
        push = new Push(context, jsonObject);

        if (push != null &&
                push.getAppKey() != null &&
                PushValidations.isValidFormatRequest(context) &&
                push.getAppKey().equals(PushPreferenceUtils.getAppKey(context))) {
            showNotification(context, push);
            PushServiceUtils.sendPushEventReceived(context, push);
        }
    }

    @Override
    public void onNewToken(String s) {
        FirebaseUtils.setPushToken(this);
        super.onNewToken(s);
    }

    @Override
    protected void showNotification(Context context, Push push) {
        new CDVPushNotification(push).showNotification(context);
    }
}
