package com.lemenzo.messenger.sms;

import android.Manifest;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.pm.PackageManager;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import com.lemenzo.messenger.R;
import java.util.List;

public final class SubscriptionHelper {
    public interface Callback {
        void onChosen(int subscriptionId);
    }

    private SubscriptionHelper() {}

    public static void choose(Activity activity, Callback callback) {
        if (activity.checkSelfPermission(Manifest.permission.READ_PHONE_STATE)
                != PackageManager.PERMISSION_GRANTED) {
            callback.onChosen(SubscriptionManager.INVALID_SUBSCRIPTION_ID);
            return;
        }

        SubscriptionManager sm = activity.getSystemService(SubscriptionManager.class);
        if (sm == null) {
            callback.onChosen(SubscriptionManager.INVALID_SUBSCRIPTION_ID);
            return;
        }

        List<SubscriptionInfo> list = sm.getActiveSubscriptionInfoList();
        if (list == null || list.isEmpty()) {
            callback.onChosen(SubscriptionManager.INVALID_SUBSCRIPTION_ID);
            return;
        }

        if (list.size() == 1) {
            callback.onChosen(list.get(0).getSubscriptionId());
            return;
        }

        String[] labels = new String[list.size()];
        for (int i = 0; i < list.size(); i++) {
            SubscriptionInfo info = list.get(i);
            int slot = info.getSimSlotIndex() + 1;
            CharSequence carrier = info.getCarrierName();
            labels[i] = carrier == null || carrier.length() == 0
                    ? activity.getString(R.string.sim_slot, slot)
                    : activity.getString(
                            R.string.sim_slot_carrier,
                            slot,
                            carrier.toString());
        }

        new AlertDialog.Builder(activity)
                .setTitle(R.string.choose_sim)
                .setItems(labels, (dialog, which) ->
                        callback.onChosen(list.get(which).getSubscriptionId()))
                .show();
    }
}
