package com.pdf417scanner;

import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;

import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;

import com.facebook.react.bridge.Arguments;
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.modules.core.DeviceEventManagerModule;

import java.util.HashMap;
import java.util.Map;

public class PDF417ScannerModule extends ReactContextBaseJavaModule {
    private static final String TAG = "PDF417ScannerModule";
    private static final String MODULE_NAME = "PDF417Scanner";
    
    private ReactApplicationContext reactContext;
    private Handler mainHandler;

    public PDF417ScannerModule(ReactApplicationContext reactContext) {
        super(reactContext);
        this.reactContext = reactContext;
        this.mainHandler = new Handler(Looper.getMainLooper());
    }

    @NonNull
    @Override
    public String getName() {
        return MODULE_NAME;
    }

    @Override
    public Map<String, Object> getConstants() {
        final Map<String, Object> constants = new HashMap<>();
        constants.put("SCAN_RESULT_EVENT", "PDF417ScanResult");
        constants.put("SCAN_ERROR_EVENT", "PDF417ScanError");
        constants.put("CAMERA_READY_EVENT", "PDF417CameraReady");
        return constants;
    }

    // Simplified methods - actual functionality is handled by CameraView
    @ReactMethod
    public void startScanning(ReadableMap config, Promise promise) {
        promise.resolve(null);
    }

    @ReactMethod
    public void stopScanning(Promise promise) {
        promise.resolve(null);
    }

    @ReactMethod
    public void setTorchEnabled(boolean enabled, Promise promise) {
        promise.resolve(null);
    }

    public void sendEvent(String eventName, WritableMap params) {
        reactContext
            .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
            .emit(eventName, params);
    }

    public void onScanResult(String data, String format) {
        WritableMap result = Arguments.createMap();
        result.putString("data", data);
        result.putString("format", format);
        result.putDouble("timestamp", System.currentTimeMillis());
        sendEvent("PDF417ScanResult", result);
    }

    public void onScanError(String code, String message) {
        WritableMap error = Arguments.createMap();
        error.putString("code", code);
        error.putString("message", message);
        sendEvent("PDF417ScanError", error);
    }

    public void onCameraReady() {
        sendEvent("PDF417CameraReady", null);
    }
}