import Cocoa

class AppDelegate: NSObject, NSApplicationDelegate {
    var statusItem: NSStatusItem!
    var serverPID: pid_t = 0

    func applicationDidFinishLaunching(_ notification: Notification) {
        // Read server PID
        if let pidStr = try? String(contentsOfFile: "/tmp/marpui.pid", encoding: .utf8) {
            serverPID = pid_t(pidStr.trimmingCharacters(in: .whitespacesAndNewlines)) ?? 0
        }

        // Create status bar item
        statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)

        if let button = statusItem.button {
            // Find icon relative to the binary's location
            let binaryPath = ProcessInfo.processInfo.arguments[0]
            let macosDir = (binaryPath as NSString).deletingLastPathComponent
            let iconPath = (macosDir as NSString).appendingPathComponent("../Resources/menubar-icon.png")
            let resolvedPath = (iconPath as NSString).standardizingPath

            if let image = NSImage(contentsOfFile: resolvedPath) {
                image.size = NSSize(width: 18, height: 18)
                image.isTemplate = true
                button.image = image
            } else {
                // Fallback to text
                button.title = "MarpUI"
            }
        }

        // Create menu
        let menu = NSMenu()

        let titleItem = NSMenuItem(title: "MarpUI is running", action: nil, keyEquivalent: "")
        titleItem.isEnabled = false
        menu.addItem(titleItem)

        menu.addItem(NSMenuItem.separator())

        let openItem = NSMenuItem(title: "Open in Browser", action: #selector(openBrowser), keyEquivalent: "o")
        openItem.target = self
        menu.addItem(openItem)

        menu.addItem(NSMenuItem.separator())

        let quitItem = NSMenuItem(title: "Stop Server", action: #selector(stopServer), keyEquivalent: "q")
        quitItem.target = self
        menu.addItem(quitItem)

        statusItem.menu = menu
    }

    @objc func openBrowser() {
        NSWorkspace.shared.open(URL(string: "http://localhost:3000")!)
    }

    @objc func stopServer() {
        if serverPID > 0 {
            kill(serverPID, SIGTERM)
        }
        NSApp.terminate(nil)
    }

    func applicationWillTerminate(_ notification: Notification) {
        if serverPID > 0 {
            kill(serverPID, SIGTERM)
        }
    }
}

let app = NSApplication.shared
app.setActivationPolicy(.accessory)
let delegate = AppDelegate()
app.delegate = delegate
app.run()
