import ComponentLibrary
import SwiftUI

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 {
        HStack(spacing: 8) {
            tappableAuthorBar
                .onTapGesture(perform: authorTapped)

            Spacer()
        }
        .padding(.vertical, 4)
    }

    @ViewBuilder
    private var tappableAuthorBar: some View {
        RemoteImage(url: avatarImageUrl, fallbackId: displayName)
            .frame(width: 20, height: 20)
            .cornerRadius(.infinity)
            .background {
                Circle()
                    .fill(Material.ultraThinMaterial)
                    .strokeBorder(Color.SemanticV2.backgroundGlassDense, lineWidth: 0.25, antialiased: true)
            }

        scrollingAuthorBar
            .foregroundColor(.SemanticV1.textPrimary)
    }

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