import Foundation
import GenAPI

protocol Playlistable: Encodable {
    associatedtype Id: HasOptionalString

    var id: Id { get }
    var imageUrl: String? { get }
    var playlistClips: [PlaylistClipSchema] { get }
    var description: String? { get }
    var numTotalResults: Int { get }
    var name: String? { get }
    var isOwned: Bool { get }
    var isTrashed: Bool { get }
    var isPublic: Bool { get }
    var userDisplayName: String? { get }
    var userHandle: String? { get }
    var userAvatarImageUrl: String? { get }
    var playCount: Int? { get }
    var upvoteCount: Int? { get }
}

protocol HasOptionalString {
    var string: String? { get }
}

extension PlaylistMetadataSchema.Id: HasOptionalString {}
extension PlaylistMetadataSchema: Playlistable {}

extension PlaylistSchema.Id: HasOptionalString {}
extension PlaylistSchema: Playlistable {}

extension PlaylistItemSchema.Id: HasOptionalString {}
extension PlaylistItemSchema: Playlistable {}
