package com.contentsquare.rn.erroranalysis;

import android.util.Log;

import com.contentsquare.android.api.bridge.reactnative.ReactNativeBridge;
import com.contentsquare.android.error.analysis.ErrorAnalysis;
import com.contentsquare.rn.utils.ReactNativeTypesConverter;
import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.ReadableArray;
import com.facebook.react.bridge.ReadableMap;

import java.util.Arrays;
import java.util.List;
import java.util.Map;

public class ErrorAnalysisModuleImpl extends ReactContextBaseJavaModule {
    public static final String NAME = "ErrorAnalysisModule";

    public ErrorAnalysisModuleImpl(ReactApplicationContext reactContext) {
        super(reactContext);
    }

    @Override
    public String getName() {
        return NAME;
    }

    @ReactMethod
    public void setURLMaskingPatterns(ReadableArray patterns) {
        List<String> stringList = ReactNativeTypesConverter.readableArrayToStringList(patterns);
        ErrorAnalysis.setUrlMaskingPatterns(stringList);
    }

    @ReactMethod
    public void triggerNativeCrash() {
        throw new RuntimeException("This is purposely triggered native crash");
    }

    @ReactMethod
    public void reportJavascriptError(ReadableMap error, Promise promise) {
        try {
            List<String> longTypes = Arrays.asList("timestamp");
            List<String> intTypes = Arrays.asList("lineNumber", "frameId", "column");
            Map<String, Object> errorMap = ReactNativeTypesConverter.readableMapToMap(error, longTypes, intTypes);

            ReactNativeBridge.sendError(errorMap);

            promise.resolve("Reported javascript error to native module");
        } catch (Exception e) {
            String message = "Exception failure while calling sendReactNativeError";
            Log.e("CSLIB", message, e);
            promise.reject("Failed to report javascript error to native module", e.getMessage());
        }
    }
}
