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

import UIKit
import AVFoundation
import Vision

@available(iOS 13, *)
@objc(CardScannerView)
@objcMembers
public class CardScannerView: UIView {
    private var cardScanner: CardScanner!
    private var cardFrame: CGRect!
    private var onCardScanned: RCTDirectEventBlock?
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupCardScannerView()
        print("CardScannerView initialized with frame \(frame)")
    }
    
    required init?(coder: NSCoder) {
        super.init(coder: coder)
        setupCardScannerView()
        print("CardScannerView initialized with coder")
    }
    
    private func setupCardScannerView() {
        self.clipsToBounds = false
        cardScanner = CardScanner()
        cardFrame = self.bounds
    }
    
    @objc public func startScanning() {
        print("Start Scanning Called")
        cardScanner.startScanning(parentView: self, cardFrame: cardFrame) { [weak self] result in
            guard let self = self else { return }
            print("Card Scanned Result: \(result)")
            self.onCardScanned?(result)
        }
    }
    
    @objc public func finshedScanning() {
        cardScanner.finshedScanning { [weak self] result in
            guard let self = self else { return }
            print("Card Scanned Result: \(result)")
            self.onCardScanned?(result)
        }
    }
    
    @objc public func retryScanning() {
        print("Retry Scanning Called")
        startScanning()
    }
    
    @objc public func stopScanning() {
        print("Stop Scanning Called")
        cardScanner.stopLiveScanning()
    }
    
    @objc public func setOnCardScanned(_ callback: @escaping RCTDirectEventBlock) {
        self.onCardScanned = callback
    }
}
