import Foundation
import React
import UIKit

// MARK: - Managers

@objc(HMTextInputMultiline)
class HMTextInputMultiline: RCTMultilineTextInputViewManager {
    
    override func view() -> UIView! {
        // Return our enhanced view directly - it inherits all TextInput functionality
        return HMTextInputMultilineView(bridge: bridge)
    }
    
    @objc
    override static func requiresMainQueueSetup() -> Bool {
        return true
    }
}

@objc(HMTextInputSingleline)
class HMTextInputSingleline: RCTSinglelineTextInputViewManager {
    
    override func view() -> UIView! {
        // Return our enhanced singleline view directly
        return HMTextInputSinglelineView(bridge: bridge)
    }
    
    @objc
    override static func requiresMainQueueSetup() -> Bool {
        return true
    }
}

// MARK: - Enhanced Views

@objc
class HMTextInputMultilineView: RCTMultilineTextInputView {
    @objc var onPasteImage: RCTDirectEventBlock?
    @objc var pasteImageLabel: String?
    @objc lazy var pasteService = PasteService()

    override init(bridge: RCTBridge) {
        super.init(bridge: bridge)
    }

    override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
        let hasHandler = onPasteImage != nil
        if hasHandler {
          if action == #selector(UIResponder.paste(_:)) {
              return UIPasteboard.general.hasStrings || UIPasteboard.general.hasImages
          }
        }
        return super.canPerformAction(action, withSender: sender)
    }

    override func paste(_ sender: Any?) {
      pasteService.pasteHandler{ [weak self] data in
        self?.onPasteImage?(data)
      }
    }

  @objc
  open func paste(defaultHandler: @escaping () -> Void) {
    pasteService.pasteHandler {[weak self] data in
      self?.onPasteImage?(data)
    } defaultHandler: {
      defaultHandler()
    }
  }
}

@objc
class HMTextInputSinglelineView: RCTSinglelineTextInputView {
    @objc var onPasteImage: RCTDirectEventBlock?
    @objc var pasteImageLabel: String?
    @objc lazy var pasteService = PasteService()

    override init(bridge: RCTBridge) {
        super.init(bridge: bridge)
    }
    
  override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
      let hasHandler = onPasteImage != nil
      if hasHandler {
        if action == #selector(UIResponder.paste(_:)) {
            return UIPasteboard.general.hasStrings || UIPasteboard.general.hasImages
        }
      }
      return super.canPerformAction(action, withSender: sender)
  }
    
  override func paste(_ sender: Any?) {
    pasteService.pasteHandler { [weak self] data in
      self?.onPasteImage?(data)
    }
  }

  @objc
  open func paste(defaultHandler: @escaping () -> Void) {
    pasteService.pasteHandler {[weak self] data in
      self?.onPasteImage?(data)
    } defaultHandler: {
      defaultHandler()
    }
  }
}
