import Foundation
import SwiftUI
import UIKit

public struct TouchesBeganProxy: UIViewRepresentable {
    let onTouchesBegan: () -> Void

    public init(onTouchesBegan: @escaping () -> Void) {
        self.onTouchesBegan = onTouchesBegan
    }

    public func makeUIView(context _: Context) -> some UIView {
        return TouchesBeganView(onTouchesBegan)
    }

    public func updateUIView(_: UIViewType, context _: Context) {
        /* Nothing */
    }
}

class TouchesBeganView: UIView {
    let onTouchesBegan: () -> Void
    init(_ onTouchesBegan: @escaping () -> Void) {
        self.onTouchesBegan = onTouchesBegan
        super.init(frame: .zero)
        self.backgroundColor = .clear
    }

    @available(*, unavailable)
    required init?(coder _: NSCoder) {
        fatalError("not implemented")
    }

    override func touchesBegan(_: Set<UITouch>, with _: UIEvent?) {
        onTouchesBegan()
    }
}
