import AppKit
import Foundation
import SwiftUI

enum Windows: String, CaseIterable {
    case player, main

    static var mainWindow: NSWindow?
    static var playerWindow: NSWindow?

    weak var window: NSWindow? {
        switch self {
        case .player:
            return Self.playerWindow
        case .main:
            return Self.mainWindow
        }
    }

    var isOpen: Bool {
        !window.isNil
    }

    func focus() {
        window?.makeKeyAndOrderFront(self)
    }

    var location: String {
        switch self {
        case .player:
            return rawValue
        case .main:
            return ""
        }
    }

    func open() {
        switch self {
        case .player:
            if let window = Self.playerWindow {
                window.makeKeyAndOrderFront(self)
            } else {
                NSWorkspace.shared.open(URL(string: "yattee://\(location)")!)
            }
        case .main:
            Self.main.focus()
        }
    }

    func hide() {
        window?.close()
    }

    func toggleFullScreen() {
        window?.toggleFullScreen(nil)
    }

    var visible: Bool {
        window?.isVisible ?? false
    }
}

struct HostingWindowFinder: NSViewRepresentable {
    var callback: (NSWindow?) -> Void

    func makeNSView(context _: Self.Context) -> NSView {
        let view = NSView()
        DispatchQueue.main.async { [weak view] in
            self.callback(view?.window)
        }
        return view
    }

    func updateNSView(_: NSView, context _: Context) {}
}