import SwiftUI

struct ChannelAvatarView: View {
    var channel: Channel?
    var video: Video?

    var subscribedBadge = true

    @ObservedObject private var accounts = AccountsModel.shared
    @ObservedObject private var subscribedChannels = SubscribedChannelsModel.shared

    var body: some View {
        ZStack(alignment: .bottomTrailing) {
            Group {
                Group {
                    if let url = channel?.thumbnailURLOrCached {
                        ThumbnailView(url: url)
                    } else {
                        ZStack {
                            Color(white: 0.6)
                                .opacity(0.5)

                            Group {
                                if let video, video.isLocal {
                                    Image(systemName: video.localStreamImageSystemName)
                                } else {
                                    Image(systemName: "play.rectangle")
                                }
                            }
                            .foregroundColor(.accentColor)
                            .font(.system(size: 20))
                            .contentShape(Rectangle())
                        }
                    }
                }
                .clipShape(Circle())

                if subscribedBadge,
                   accounts.app.supportsSubscriptions,
                   accounts.signedIn,
                   let channel,
                   subscribedChannels.isSubscribing(channel.id)
                {
                    Image(systemName: "star.circle.fill")
                    #if os(tvOS)
                        .background(Color.black)
                    #else
                        .background(Color.background)
                    #endif
                        .clipShape(Circle())
                        .foregroundColor(.secondary)
                }
            }
        }
        .imageScale(.small)
    }
}

struct ChannelAvatarView_Previews: PreviewProvider {
    static var previews: some View {
        ChannelAvatarView(channel: Video.fixture.channel)
    }
}