// Generated by Create API
// https://github.com/CreateAPI/CreateAPI

import Foundation

public struct RadioStation: Codable, Equatable {
    public var description: String?
    public var id: Id
    public var imageS3Id: String?
    public var isLiked: Bool?
    public var isLive: Bool?
    public var isSunoHosted: Bool?
    public var lastListenedAt: String?
    public var name: String?
    public var numLikes: Int?
    public var numLiveUser: Int?
    public var ownerAvatarImageUrl: String?
    public var ownerDisplayName: String?
    public var ownerHandle: String?
    public var playlistId: PlaylistId?
    public var prompt: String?

    public struct Id: Codable, Equatable {
        public var uuid: UUID?
        public var string: String?

        public init(uuid: UUID? = nil, string: String? = nil) {
            self.uuid = uuid
            self.string = string
        }

        public init(from decoder: Decoder) throws {
            let container = try decoder.singleValueContainer()
            self.uuid = try? container.decode(UUID.self)
            self.string = try? container.decode(String.self)
        }

        public func encode(to encoder: Encoder) throws {
            var container = encoder.singleValueContainer()
            if let value = uuid { try container.encode(value) }
            if let value = string { try container.encode(value) }
        }
    }

    public struct PlaylistId: Codable, Equatable {
        public var uuid: UUID?
        public var string: String?

        public init(uuid: UUID? = nil, string: String? = nil) {
            self.uuid = uuid
            self.string = string
        }

        public init(from decoder: Decoder) throws {
            let container = try decoder.singleValueContainer()
            self.uuid = try? container.decode(UUID.self)
            self.string = try? container.decode(String.self)
        }

        public func encode(to encoder: Encoder) throws {
            var container = encoder.singleValueContainer()
            if let value = uuid { try container.encode(value) }
            if let value = string { try container.encode(value) }
        }
    }

    public init(description: String? = nil, id: Id, imageS3Id: String? = nil, isLiked: Bool? = nil, isLive: Bool? = nil, isSunoHosted: Bool? = nil, lastListenedAt: String? = nil, name: String? = nil, numLikes: Int? = nil, numLiveUser: Int? = nil, ownerAvatarImageUrl: String? = nil, ownerDisplayName: String? = nil, ownerHandle: String? = nil, playlistId: PlaylistId? = nil, prompt: String? = nil) {
        self.description = description
        self.id = id
        self.imageS3Id = imageS3Id
        self.isLiked = isLiked
        self.isLive = isLive
        self.isSunoHosted = isSunoHosted
        self.lastListenedAt = lastListenedAt
        self.name = name
        self.numLikes = numLikes
        self.numLiveUser = numLiveUser
        self.ownerAvatarImageUrl = ownerAvatarImageUrl
        self.ownerDisplayName = ownerDisplayName
        self.ownerHandle = ownerHandle
        self.playlistId = playlistId
        self.prompt = prompt
    }
}
