import Foundation
import SwiftUI

struct MenuCommands: Commands {
    @Binding var model: MenuModel

    var body: some Commands {
        navigationMenu
        playbackMenu
    }

    private var navigationMenu: some Commands {
        CommandGroup(before: .windowSize) {
            Button("Favorites") {
                model.navigation?.tabSelection = .favorites
            }
            .keyboardShortcut("1")

            Button("Subscriptions") {
                model.navigation?.tabSelection = .subscriptions
            }
            .disabled(subscriptionsDisabled)
            .keyboardShortcut("2")

            Button("Popular") {
                model.navigation?.tabSelection = .popular
            }
            .disabled(!(model.accounts?.app.supportsPopular ?? true))
            .keyboardShortcut("3")

            Button("Trending") {
                model.navigation?.tabSelection = .trending
            }
            .keyboardShortcut("4")

            Button("Search") {
                model.navigation?.tabSelection = .search
            }
            .keyboardShortcut("f")

            Divider()
        }
    }

    private var subscriptionsDisabled: Bool {
        !(
            (model.accounts?.app.supportsSubscriptions ?? false) && model.accounts?.signedIn ?? false
        )
    }

    private var playbackMenu: some Commands {
        CommandMenu("Playback") {
            Button((model.player?.isPlaying ?? true) ? "Pause" : "Play") {
                model.player?.togglePlay()
            }
            .disabled(model.player?.currentItem.isNil ?? true)
            .keyboardShortcut("p")

            Button("Play Next") {
                model.player?.advanceToNextItem()
            }
            .disabled(model.player?.queue.isEmpty ?? true)
            .keyboardShortcut("s")

            Button((model.player?.presentingPlayer ?? true) ? "Hide Player" : "Show Player") {
                model.player?.togglePlayer()
            }
            .keyboardShortcut("o")
        }
    }
}