package me.elieraad.bottomsheet;

import com.getcapacitor.JSArray;
import com.getcapacitor.JSObject;
import com.getcapacitor.Logger;
import com.getcapacitor.Plugin;
import com.getcapacitor.PluginCall;
import com.getcapacitor.PluginMethod;
import com.getcapacitor.annotation.CapacitorPlugin;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.List;

@CapacitorPlugin(name = "BottomSheet")
public class BottomSheetPlugin extends Plugin {

    private BottomSheet implementation = new BottomSheet();

    @PluginMethod
    public void showActions(PluginCall call) {
        JSArray options = call.getArray("options");
        if (options == null) {
            call.reject("Must supply options");
            return;
        }
        if (getActivity().isFinishing()) {
            call.reject("App is finishing");
            return;
        }

        try {
            List<Object> optionsList = options.toList();
            ActionSheetOption[] actionOptions = new ActionSheetOption[optionsList.size()];
            for (int i = 0; i < optionsList.size(); i++) {
                JSObject o = JSObject.fromJSONObject((JSONObject) optionsList.get(i));
                String titleOption = o.getString("title", "");
                String iconOption = o.getString("icon", "");
                actionOptions[i] = new ActionSheetOption(titleOption, iconOption);
            }
            implementation.setOptions(actionOptions);
            implementation.setOnCancelListener(() -> implementation.dismiss());
            implementation.setOnSelectedListener(
                    index -> {
                        JSObject ret = new JSObject();
                        Logger.debug("INDEX " + index);
                        ret.put("value", index);
                        call.resolve(ret);
                        implementation.dismiss();
                    }
            );
            implementation.show(getActivity().getSupportFragmentManager(), "capacitorModalsActionSheet");
        } catch (JSONException ex) {
            Logger.error("JSON error processing an option for showActions", ex);
            call.reject("JSON error processing an option for showActions", ex);
        }
    }
}
