import Cocoa class StatusMenu: NSMenu { private let mountService: MountService private let statusMonitor: StatusMonitor private var statusMenuItem: NSMenuItem? private var mountMenuItem: NSMenuItem? private var unmountMenuItem: NSMenuItem? init(mountService: MountService, statusMonitor: StatusMonitor) { self.mountService = mountService self.statusMonitor = statusMonitor super.init(title: "MarkBaseFS") } required init(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } func createMenu() -> NSMenu { let menu = NSMenu() statusMenuItem = NSMenuItem(title: "Status: Unmounted", action: nil, keyEquivalent: "") statusMenuItem?.isEnabled = false menu.addItem(statusMenuItem!) menu.addItem(NSMenuItem.separator()) let infoItem = NSMenuItem(title: "Nodes: 0", action: nil, keyEquivalent: "") infoItem.isEnabled = false menu.addItem(infoItem) menu.addItem(NSMenuItem.separator()) mountMenuItem = NSMenuItem(title: "Mount", action: #selector(mountAction), keyEquivalent: "m") mountMenuItem?.target = self menu.addItem(mountMenuItem!) unmountMenuItem = NSMenuItem(title: "Unmount", action: #selector(unmountAction), keyEquivalent: "u") unmountMenuItem?.target = self unmountMenuItem?.isEnabled = false menu.addItem(unmountMenuItem!) menu.addItem(NSMenuItem.separator()) let settingsItem = NSMenuItem(title: "Settings...", action: #selector(openSettings), keyEquivalent: "s") settingsItem.target = self menu.addItem(settingsItem) menu.addItem(NSMenuItem.separator()) let quitItem = NSMenuItem(title: "Quit", action: #selector(quitAction), keyEquivalent: "q") quitItem.target = self menu.addItem(quitItem) return menu } func updateStatusText(_ text: String) { statusMenuItem?.title = "Status: \(text)" } @objc func mountAction() { print("Mount action triggered") let result = mountService.mount() switch result { case .success: updateStatusText("Mounted") mountMenuItem?.isEnabled = false unmountMenuItem?.isEnabled = true print("Mount successful") case .failure(let error): print("Mount failed: \(error)") showAlert(title: "Mount Failed", message: error.localizedDescription) } } @objc func unmountAction() { print("Unmount action triggered") let result = mountService.unmount() switch result { case .success: updateStatusText("Unmounted") mountMenuItem?.isEnabled = true unmountMenuItem?.isEnabled = false print("Unmount successful") case .failure(let error): print("Unmount failed: \(error)") showAlert(title: "Unmount Failed", message: error.localizedDescription) } } @objc func openSettings() { print("Open settings") let settingsWindow = SettingsWindow() settingsWindow.showWindow(nil) } @objc func quitAction() { print("Quit action") NSApplication.shared.terminate(nil) } private func showAlert(title: String, message: String) { let alert = NSAlert() alert.messageText = title alert.informativeText = message alert.alertStyle = .warning alert.addButton(withTitle: "OK") alert.runModal() } }