import SwiftUI
import SwiftTerm

/// NSViewRepresentable wrapper that embeds a SwiftTerm TerminalView.
/// The container has a solid black background — matching the notch panel.
/// All transparency is handled by the single `.opacity()` on ContentView.
struct SwiftTermView: NSViewRepresentable {

    let session: TerminalSession

    func makeNSView(context: Context) -> NSView {
        let container = NSView()
        container.wantsLayer = true
        container.layer?.backgroundColor = NSColor.black.cgColor
        embedTerminalView(in: container)
        return container
    }

    func updateNSView(_ nsView: NSView, context: Context) {
        let tv = session.terminalView

        if nsView.subviews.first !== tv {
            nsView.subviews.forEach { $0.removeFromSuperview() }
            embedTerminalView(in: nsView)
        }

        DispatchQueue.main.async {
            if let window = nsView.window, window.isKeyWindow {
                window.makeFirstResponder(tv)
            }
        }
    }

    private func embedTerminalView(in container: NSView) {
        let tv = session.terminalView
        tv.removeFromSuperview()
        container.addSubview(tv)
        tv.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate([
            tv.topAnchor.constraint(equalTo: container.topAnchor),
            tv.bottomAnchor.constraint(equalTo: container.bottomAnchor),
            tv.leadingAnchor.constraint(equalTo: container.leadingAnchor),
            tv.trailingAnchor.constraint(equalTo: container.trailingAnchor),
        ])
    }
}
