//
//  CardScanner.swift
//  DWP
//
//  Created by Ahmed Wahdan on 04/12/2024.
//

import UIKit
import VisionKit
import AVFoundation
import Vision

@available(iOS 13, *)
@objc(CardScanner)
class CardScanner: NSObject {
    private var onCardScanned: (([String: String]) -> Void)?
    private let liveScanner = LiveScanner()

  /// Start scanning in the selected mode
  func startScanning(
    parentView: UIView? = nil,
    cardFrame: CGRect? = nil,
    completion: @escaping ([String: String]) -> Void
  ) {
    self.onCardScanned = completion
    
    guard let parentView = parentView, let cardFrame = cardFrame else {
      completion(["error": "Live scanning requires a parent view and card frame"])
      return
    }
    
    liveScanner.startScanning(in: parentView, cardFrame: cardFrame, completion: completion)
  }

    /// Stop live scanning
    func stopLiveScanning() {
        liveScanner.stopScanning()
    }
    
    func finshedScanning(completion: @escaping ([String: String]) -> Void) {
        DispatchQueue.main.async {
            // Pass the final scanned card details
            completion(self.liveScanner.finalCardDetails)
        }
        liveScanner.stopScanning() // Ensure live scanning is stopped
    }
}
