package com.akcybex.sms.broadcast;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.Toast;

import com.akcybex.sms.AKSmsModule;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.modules.core.DeviceEventManagerModule;

public class SmsBroadcastReceiver extends BroadcastReceiver {
    private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
    private static final String TAG = SmsBroadcastReceiver.class.getName();

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.e(TAG, "Intent recieved: " + intent.getAction());


        if (intent.getAction().equals(SMS_RECEIVED)) {
            Bundle bundle = intent.getExtras();
            if (bundle != null) {

                Object[] pdus = (Object[])bundle.get("pdus");
                final SmsMessage[] messages = new SmsMessage[pdus.length];
                for (int i = 0; i < pdus.length; i++) {
                    messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
                }

                if (messages.length > -1) {
                    String number = messages[0].getOriginatingAddress();
                    String message = messages[0].getMessageBody();
                    Log.e(TAG, "Message recieved: " + message);

                    WritableMap map = Arguments.createMap();
                    map.putString("number", number);
                    map.putString("message", message);

                    Toast.makeText(context, "From: " + number + ", Message: " + message, Toast.LENGTH_LONG).show();
                    sendEvent("akSmsReceived", map);
                }
            }
        }
    }

    private void sendEvent(String eventName, WritableMap map) {

        try{
            ReactContext reactContext = AKSmsModule.reactContext;

            reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
                    .emit(eventName, map);
        }
        catch(Exception e){
            Log.d("ReactNativeJS","Exception in sendEvent in ReferrerBroadcastReceiver is:"+e.toString());
        }

    }
}
