package com.lemenzo.messenger.sms;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.ComponentName;
import android.content.Intent;
import android.telephony.SubscriptionManager;
import com.lemenzo.messenger.data.BroadcastStore;

public final class BulkSmsBridgeReceiver extends BroadcastReceiver {
    public static final String ACTION_BULK_SEND =
            "com.lemenzo.messenger.action.BULK_SEND";

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent == null || !ACTION_BULK_SEND.equals(intent.getAction())) {
            return;
        }

        String requestId = intent.getStringExtra("request_id");
        String destination = intent.getStringExtra("destination");
        String text = intent.getStringExtra("text");
        String broadcastId = intent.getStringExtra("broadcast_id");
        String broadcastMessageId = intent.getStringExtra("broadcast_message_id");
        String broadcastTitle = intent.getStringExtra("broadcast_title");
        String broadcastBody = intent.getStringExtra("broadcast_body");
        String recipientName = intent.getStringExtra("recipient_name");
        int broadcastTotal = intent.getIntExtra("broadcast_total", 0);

        boolean metadataValid = broadcastId != null && !broadcastId.isEmpty()
                && broadcastMessageId != null && !broadcastMessageId.isEmpty()
                && destination != null && !destination.trim().isEmpty();
        if (metadataValid) {
            new BroadcastStore(context).upsertExternalRecipient(
                    broadcastId,
                    broadcastMessageId,
                    broadcastTitle,
                    broadcastBody,
                    broadcastTotal,
                    -1L,
                    recipientName,
                    destination,
                    text);
        }

        boolean accepted = false;
        if (requestId != null && !requestId.isEmpty()) {
            accepted = metadataValid
                    ? SmsSender.sendExternalBroadcastRecipient(
                            context,
                            destination,
                            text,
                            SubscriptionManager.INVALID_SUBSCRIPTION_ID,
                            requestId,
                            broadcastId,
                            broadcastMessageId)
                    : SmsSender.send(
                            context,
                            destination,
                            text,
                            SubscriptionManager.INVALID_SUBSCRIPTION_ID,
                            requestId);
        }

        if (!accepted && requestId != null && !requestId.isEmpty()) {
            if (metadataValid) {
                new BroadcastStore(context).updateRecipient(
                        broadcastId, broadcastMessageId, destination, "failed");
            }
            sendStatus(context, requestId, "failed");
        }
    }

    private static void sendStatus(
            Context context,
            String requestId,
            String status) {
        Intent result = new Intent("com.lemenzo.multisms.BULK_STATUS")
                .setComponent(new ComponentName(
                        "com.lemenzo.multisms",
                        "com.lemenzo.multisms.BulkStatusReceiver"))
                .putExtra("request_id", requestId)
                .putExtra("status", status);
        context.sendBroadcast(
                result,
                "com.lemenzo.permission.MULTI_SMS");
    }
}
