package com.nsure.reactnative;

import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactApplicationContext;
import com.nsure.nsure.NSure;

import javax.annotation.Nullable;

/**
 * Shared implementation for both Old and New Architecture.
 * Catches Throwable so Error subclasses surface as NSURE_ERROR rejections.
 */
class NSureSDKImpl {

    static final String NAME = "NSureSDK";

    static void initialize(ReactApplicationContext context, String appId, @Nullable String partnerId, @Nullable String configBaseUrl, Promise promise) {
        try {
            // Dispatch by arity so each JS call lands on the matching Java overload.
            NSure nsure;
            if (partnerId == null && configBaseUrl == null) {
                nsure = NSure.getInstance(context, appId);
            } else if (configBaseUrl == null) {
                nsure = NSure.getInstance(context, appId, partnerId);
            } else {
                nsure = NSure.getInstance(context, appId, partnerId, configBaseUrl);
            }
            promise.resolve(nsure.getDeviceId());
        } catch (Throwable t) {
            promise.reject("NSURE_ERROR", t);
        }
    }

    static void getVersion(Promise promise) {
        try {
            NSure nsure = NSure.getInstance();
            promise.resolve(nsure.getVersion());
        } catch (Throwable t) {
            promise.reject("NSURE_ERROR", t);
        }
    }

    static void getDeviceId(Promise promise) {
        try {
            NSure nsure = NSure.getInstance();
            promise.resolve(nsure.getDeviceId());
        } catch (Throwable t) {
            promise.reject("NSURE_ERROR", t);
        }
    }
}
