import Foundation
import React
import MLKitVision
import MLKitObjectDetection

@objc(ObjectDetectionModule)
class ObjectDetectionModule: NSObject {

    @objc func startObjectDetection(_ imagePath: String, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
        guard let imageUrl = URL(string: imagePath),
              let imageData = try? Data(contentsOf: imageUrl),
              let img = UIImage(data: imageData) else {
            rejecter("ERROR", "Failed to load image", nil)
            return
        }

        let visionImage = VisionImage(image: img)
        visionImage.orientation = img.imageOrientation

        let objectDetector = ObjectDetection.objectDetector(options: ObjectDetectorOptions())

        objectDetector.process(visionImage) { (objects, error) in
            if let error = error {
                rejecter("ERROR", "Object detection failed", error)
                return
            }

            if let objects = objects {
                var result = [[String: Any]]()
                for object in objects {
                    var objectData = [String: Any]()
                    objectData["frame"] = object.frame
                    objectData["trackingID"] = object.trackingID ?? NSNull()
                    
                    let labels = object.labels.map { label in
                        return ["text": label.text, "confidence": label.confidence]
                    }
                    
                    objectData["labels"] = labels
                    result.append(objectData)
                }
                resolver(result)
            }
        }
    }
}
