import AppKit
import Carbon

final class EditableNSTextField: NSTextField {
    override func performKeyEquivalent(with event: NSEvent) -> Bool {
        let modifiers = event.modifierFlags.rawValue
        let key = event.keyCode

        if event.type == NSEvent.EventType.keyDown {
            if modsContains(keys: OSCmd, in: modifiers) {
                if key == kVK_ANSI_X {
                    if NSApp.sendAction(#selector(NSText.cut(_:)),
                                        to: nil, from: self)
                    { return true }
                } else if key == kVK_ANSI_C {
                    if NSApp.sendAction(#selector(NSText.copy(_:)),
                                        to: nil, from: self)
                    { return true }
                } else if key == kVK_ANSI_V {
                    if NSApp.sendAction(#selector(NSText.paste(_:)),
                                        to: nil, from: self)
                    { return true }
                } else if key == kVK_ANSI_Z {
                    if NSApp.sendAction(Selector(("undo:")),
                                        to: nil, from: self)
                    { return true }
                } else if key == kVK_ANSI_A {
                    if NSApp.sendAction(
                        #selector(NSResponder.selectAll(_:)),
                                  to: nil, from: self)
                    { return true }
                }
            } else if modsContains(keys: OSCmd | OSShift, in: modifiers) {
                if key == kVK_ANSI_Z {
                    if NSApp.sendAction(Selector(("redo:")),
                                        to: nil, from: self)
                    { return true }
                }
            }
        }

        return super.performKeyEquivalent(with: event)
    }
}
