package com.castlabs.reactnative.arch_new;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.castlabs.reactnative.network.NetworkModule;
import com.castlabs.reactnative.network.RequestCompleter;
import com.castlabs.reactnative.network.ResponseCompleter;
import com.castlabs.reactnative.specs.NativeNetworkModuleSpec;
import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReadableMap;

import java.util.Map;

public class NativeNetworkModule extends NativeNetworkModuleSpec {

    public static final String NAME = "NativeNetworkModule";
    private NetworkModule _networkModule;

    public NativeNetworkModule (
        @NonNull final ReactApplicationContext context,
        @NonNull final Map<String, RequestCompleter> requestCompleterCache,
        @NonNull final Map<String, ResponseCompleter> responseCompleterCache
    ) {
        super(context);
        _networkModule = new NetworkModule(
            context,
            requestCompleterCache,
            responseCompleterCache
        );
    }

    @Override
    public void completeRequest(String requestId, @Nullable String url, @Nullable ReadableMap headers, @Nullable String body, Promise promise) {
        _networkModule.completeRequest(requestId, url, headers, body);
        promise.resolve(null);
    }

    @Override
    public void completeResponse(String requestId, @Nullable ReadableMap headers, @Nullable String body, Promise promise) {
        _networkModule.completeResponse(requestId, headers, body);
        promise.resolve(null);
    }
}
