package com.readyio.readywallet;

import android.content.Intent;
import android.os.Bundle;

import androidx.annotation.NonNull;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.Callback;
import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.ReadableArray;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.module.annotations.ReactModule;
import com.reactnativecommunity.asyncstorage.AsyncStorageModule;

@ReactModule(name = ReadyWalletModule.NAME)
public class ReadyWalletModule extends ReactContextBaseJavaModule {
  public static final String NAME = "ReadyWallet";
  private ReactApplicationContext reactContext;

  private AsyncStorageModule storageModule;

  public ReadyWalletModule(ReactApplicationContext reactContext) {
    super(reactContext);
    this.reactContext = reactContext;
    this.storageModule = new AsyncStorageModule(reactContext);
  }

  @ReactMethod
  public void getIsLaunch(Promise promise) {
    promise.resolve(ReadyWalletActivity.isLaunch);
  }

  public void sendEvent(String type, ReadableMap params) {
    Intent intent = new Intent(ReadyWalletActivity.BROASCAST_EVENT);
    intent.putExtra("data", Arguments.toBundle(params));
    intent.putExtra("type", type);
    this.reactContext.sendBroadcast(intent);
  }

  @ReactMethod
  public void sendPushDataEvent(ReadableMap params) {
    this.sendEvent(ReadyWalletActivity.PUSH_EVENT_NAME, params);
  }

  @ReactMethod
  public void sendDeeplinkDataEvent(ReadableMap params) {
    this.sendEvent(ReadyWalletActivity.DEEPLINK_EVENT_NAME, params);
  }

  @ReactMethod
  public void openApp(ReadableMap initProps) {
    Intent intent = new Intent(reactContext, ReadyWalletActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    Bundle bundle = new Bundle();
    bundle.putBundle("initProps", Arguments.toBundle(initProps));
    intent.putExtras(bundle);
    reactContext.startActivity(intent);
  }

  @ReactMethod
  public void closeApp() {
    ReadyWalletActivity.close();
  }

  @ReactMethod
  public void multiGet(final ReadableArray keys, final Callback callback) {
    this.storageModule.multiGet(keys, callback);
  }

  @ReactMethod
  public void multiSet(final ReadableArray keyValueArray, final Callback callback) {
    this.storageModule.multiSet(keyValueArray, callback);
  }

  @Override
  @NonNull
  public String getName() {
    return NAME;
  }
}
