
package com.trustdevice;

import androidx.annotation.NonNull;

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.ReadableMap;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.bridge.Arguments; 
import com.trustdevice.utils.TDUniRiskUtils;

import java.util.HashMap;

import com.trustdecision.mobrisk.TDRisk;
import com.trustdecision.mobrisk.TDRiskCallback;
import com.trustdecision.mobrisk.TDAPISignResult;

public class TrustdeviceModule extends ReactContextBaseJavaModule {
    private final ReactApplicationContext reactContext;

    public TrustdeviceModule(ReactApplicationContext reactContext) {
        super(reactContext);
        this.reactContext = reactContext;
    }

    @NonNull
    @Override
    public String getName() {
        return "TrustDevice";
    }

    @ReactMethod
    public void initWithOptions(ReadableMap readableMap, Promise promise) {
        if (readableMap != null) {
            HashMap<String, Object> options = readableMap.toHashMap();
            TDRisk.Builder builder = TDUniRiskUtils.mapToBuilder(options);
            TDRisk.initWithOptions(this.reactContext.getApplicationContext(), builder);
            promise.resolve(null);
        }
    }

    @ReactMethod
    public void getBlackBox(Promise promise) {
        try {
            String blackBox = TDRisk.getBlackBox();
            promise.resolve(blackBox);
        } catch (Exception e) {
            promise.reject("getBlackBox Error", e);
        }
    }

    @ReactMethod
    public void getBlackBoxAsync(Promise promise) {
        try {
            TDRisk.getBlackBoxAsync(new TDRiskCallback() {
                @Override
                public void onEvent(String blackbox) {
                    promise.resolve(blackbox);
                }
            });
        } catch (Exception e) {
            promise.reject("getBlackBoxAsync Error", e);
        }
    }

    @ReactMethod
    public void sign(String path, Promise promise) {
        try {
            TDAPISignResult signResult = TDRisk.sign(this.reactContext.getApplicationContext(), path);
            // 创建 WritableMap 来返回结构化数据
            WritableMap resultMap = Arguments.createMap();
            resultMap.putString("sign", signResult.signature());
            resultMap.putInt("code", signResult.code());
            resultMap.putString("msg", signResult.message());
            
            promise.resolve(resultMap);
            
        } catch (Exception e) {
            promise.reject("sign Error", e);
        }
    }

    @ReactMethod
    public void getSDKVersion(Promise promise) {
        String sdkVersion = TDRisk.getSDKVersion();
        promise.resolve(sdkVersion);
    }
}