import APIClient
import ComposableArchitecture
import Localization
import SwiftUI

public struct PlaylistShareCardView: View {
    let playlist: Playlist
    @Shared var me: Me
    let authorInfo: AuthorInfo?

    public init(_ playlist: Playlist, me: Shared<Me>) {
        self.playlist = playlist
        self._me = me
        self.authorInfo = {
            var displayName: String? {
                playlist.isOwned ? me.wrappedValue.user.displayName : playlist.userDisplayName ?? playlist.userHandle
            }
            var imageUrl: String? {
                playlist.isOwned ? me.wrappedValue.user.avatarImageUrl : playlist.userAvatarImageUrl
            }

            guard let displayName = displayName, !displayName.isEmpty else { return nil }
            return AuthorInfo(authorId: nil, displayName: displayName, imageUrl: imageUrl)
        }()
    }

    public var body: some View {
        ShareCardView(
            .playlist(playlist),
            title: playlist.name,
            tags: nil,
            cta: L10n.FeatureShare.listenOnSuno,
            caption: L10n.FeatureShare.shareSongs(playlist.totalResults),
            authorInfo: authorInfo,
            imageUrl: playlist.imageUrl,
            fallbackId: playlist.id
        )
    }
}
