package com.rnotp;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.support.v4.content.LocalBroadcastManager;
import android.util.Log;

import com.facebook.react.bridge.Callback;
import com.facebook.react.bridge.LifecycleEventListener;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;

import javax.annotation.Nonnull;

import static android.content.ContentValues.TAG;

public class OtpManager extends ReactContextBaseJavaModule implements LifecycleEventListener {

	private BroadcastReceiver receiver;
	ReactApplicationContext rectContext;

    public OtpManager(ReactApplicationContext reactContext) {
		super(reactContext);
		rectContext = reactContext;
    }

    @Nonnull
    @Override
    public String getName() {
        return "OtpManager";
    }

    @ReactMethod
    public void startService(Callback callback) {
        if (receiver == null) {
            Log.d(TAG, "START SERVICE :::::  NULL");
        } else {
            Log.d(TAG, "START SERVICE ::::: NOT NULL");
        }

        stopService();
        initService(callback);
        if (receiver != null)
            LocalBroadcastManager.getInstance(rectContext).registerReceiver(receiver, new IntentFilter("otp"));
    }

    @ReactMethod
    private void stopService() {
        Log.d(TAG, "STOP SERVICE ::::: ");
        if (receiver != null) {
            LocalBroadcastManager.getInstance(rectContext).unregisterReceiver(receiver);
            receiver = null;
        }
    }


    private void initService(final Callback callback) {
        receiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                if (intent.getAction().equalsIgnoreCase("otp")) {
                    final String message = intent.getStringExtra("message");
                    Log.d(TAG, "onReceive: Message :---> " + message);
                    callback.invoke(message.trim());
                }
            }
        };
    }

    @Override
    public void onHostResume() {
        if (receiver != null) {
            LocalBroadcastManager.getInstance(rectContext).registerReceiver(receiver, new IntentFilter("otp"));
        }
    }

    @Override
    public void onHostPause() {
        if (receiver != null) {
            LocalBroadcastManager.getInstance(rectContext).unregisterReceiver(receiver);
            //receiver = null;
        }
    }

    @Override
    public void onHostDestroy() {

    }
}
