import Defaults
import SwiftUI

struct RelatedView: View {
    @EnvironmentObject<AccountsModel> private var accounts
    @EnvironmentObject<NavigationModel> private var navigation
    @EnvironmentObject<PlayerModel> private var player
    @EnvironmentObject<PlaylistsModel> private var playlists

    var body: some View {
        List {
            if let related = player.currentVideo?.related {
                Section(header: Text("Related")) {
                    ForEach(related) { video in
                        PlayerQueueRow(item: PlayerQueueItem(video))
                            .contextMenu {
                                Section {
                                    Button {
                                        player.playNext(video)
                                    } label: {
                                        Label("Play Next", systemImage: "text.insert")
                                    }
                                    Button {
                                        player.enqueueVideo(video)
                                    } label: {
                                        Label("Play Last", systemImage: "text.append")
                                    }
                                }

                                if accounts.app.supportsUserPlaylists && accounts.signedIn {
                                    Section {
                                        Button {
                                            navigation.presentAddToPlaylist(video)
                                        } label: {
                                            Label("Add to playlist...", systemImage: "text.badge.plus")
                                        }

                                        if let playlist = playlists.lastUsed {
                                            Button {
                                                playlists.addVideo(playlistID: playlist.id, videoID: video.videoID, navigation: navigation)
                                            } label: {
                                                Label("Add to \(playlist.title)", systemImage: "text.badge.star")
                                            }
                                        }
                                    }
                                }
                            }
                    }
                }
            }
        }
        #if os(macOS)
        .listStyle(.inset)
        #elseif os(iOS)
        .listStyle(.grouped)
        #else
        .listStyle(.plain)
        #endif
    }
}

struct RelatedView_Previews: PreviewProvider {
    static var previews: some View {
        RelatedView()
    }
}