import SwiftUI
import Utilities

/*
 Reusable author capsule used in `ExpandedPlayer`, `VideoSongArtFullscreenPreview`.
 This shows the author's avatar and name in a moving marquee if needed.
 */
public struct ExpandedPlayerAuthorCapsule: View {
    public let avatarImageUrl: String?
    public let displayName: String
    public let authorTapped: () -> Void

    public init(
        avatarImageUrl: String?,
        displayName: String,
        authorTapped: @escaping () -> Void
    ) {
        self.avatarImageUrl = avatarImageUrl
        self.displayName = displayName
        self.authorTapped = authorTapped
    }

    public var body: some View {
        Button {
            UIImpactFeedbackGenerator(style: .light).impactOccurred()
            authorTapped()
        } label: {
            HStack(spacing: 8) {
                RemoteImage(url: avatarImageUrl, fallbackId: displayName)
                    .frame(width: 20, height: 20)
                    .cornerRadius(.infinity)

                scrollingAuthorBar
                    .foregroundColor(.SemanticV1.textPrimary)
                    .lineLimit(1)
            }
            .padding(.vertical, 4)
        }
    }

    private var scrollingAuthorBar: some View {
        MarqueeText(
            text: displayName,
            font: TypographyV1.caption2.neueMontrealMedium().uiFont ?? .systemFont(ofSize: 13),
            leftFade: 0.5,
            rightFade: 0.5,
            startDelay: 2,
            alignment: .leading
        )
    }
}
