package com.helpshift.react.utils;

import android.app.Application;
import android.content.Context;
import android.app.PendingIntent;
import android.content.Intent;
import android.util.Log;
import com.helpshift.react.storage.HelpshiftReactNativeStorage;
import com.helpshift.Helpshift;
import android.app.Application;

import com.helpshift.HSPluginEventBridge;
import com.helpshift.CommonPluginEventAPI;

import java.util.Map;

public class InstallUtils {

  private static final String TAG = "HelpshiftInstallUtil";
  private static boolean isHelpshiftInitSuccessful;

  private InstallUtils() {
    // empty
  }

  public static boolean installWithCachedValues(Context context) {

    // Call install only when we know it was not done before.
    if (isHelpshiftInitSuccessful) {
      return true;
    }

    try {
      HelpshiftReactNativeStorage storage = HelpshiftReactNativeStorage.getInstance(context);
      String domain = storage.getString(HelpshiftReactNativeStorage.DOMAIN_NAME);
      String platformId = storage.getString(HelpshiftReactNativeStorage.PLATFORM_ID);
      Map<String, Object> config = storage.getMap(HelpshiftReactNativeStorage.INSTALL_CONFIG);

      commonInstall((Application) context.getApplicationContext(), platformId, domain, config);

      isHelpshiftInitSuccessful = true;
      return true;
    }
    catch (Exception e) {
      Log.e(TAG, "Error initializing Helpshift : ", e);
    }
    return false;
  }

  public static void commonInstall(Application application, String platformId, String domain,
                                   Map<String, Object> config) {
    try {
    CommonPluginEventAPI eventsAPI = new CommonPluginEventAPI() {
           @Override
             public PendingIntent getPendingIntentForNotification(Context context, PendingIntent originalPendingIntent) {
                return IntentProvider.wrapPendingIntentWithReactNativeDelegateActivity(context, originalPendingIntent);
             }
      };
    HSPluginEventBridge.setPluginEventsAPI(eventsAPI);
    eventsAPI.init();
    Helpshift.install(application, platformId, domain, config);
    } catch (Exception e) {
      Log.e(TAG, "Error installing Helpshift SDK.", e);
    }
  }
}
