//
//  KeyboardReader.swift
//  ComposeUI
//
//  Created by Shadowfacts on 3/7/23.
//

import UIKit
import Combine

@available(iOS, obsoleted: 16.0)
class KeyboardReader: ObservableObject {
//    @Published var isVisible = false
    @Published var keyboardHeight: CGFloat = 0
    
    var isVisible: Bool {
        // when a hardware keyboard is connected, the height is very short, so we don't consider that being "visible"
        keyboardHeight > 72
    }
    
    init() {
        NotificationCenter.default.addObserver(self, selector: #selector(willShow), name: UIResponder.keyboardWillShowNotification, object: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(willHide), name: UIResponder.keyboardWillHideNotification, object: nil)
    }
    
    @objc func willShow(_ notification: Foundation.Notification) {
        let endFrame = notification.userInfo![UIResponder.keyboardFrameEndUserInfoKey] as! CGRect
//        isVisible = endFrame.height > 72
        keyboardHeight = endFrame.height
    }
    
    @objc func willHide() {
        // sometimes willHide is called during a SwiftUI view update
        DispatchQueue.main.async {
//            self.isVisible = false
            self.keyboardHeight = 0
        }
    }
}
