import Foundation
import SwiftData

public struct MiniClipOrPlaylist: Equatable, Hashable, Codable {
    public var id: String
    public var title: String
    public var imageUrl: String?

    init(_ remote: Components.Schemas.MiniClipOrPlaylistSchema) throws {
        self.id = remote.id
        self.title = remote.title
        self.imageUrl = remote.image_url
    }

    enum CodingKeys: String, CodingKey {
        case id
        case title
        case imageUrl = "image_url"
    }

    public init(from decoder: any Decoder) throws {
        let container = try decoder.container(keyedBy: CodingKeys.self)
        id = try container.decode(String.self, forKey: .id)
        title = try container.decode(String.self, forKey: .title)
        imageUrl = try container.decodeIfPresent(String.self, forKey: .imageUrl)
    }

    public func encode(to encoder: any Encoder) throws {
        var container = encoder.container(keyedBy: CodingKeys.self)
        try container.encode(id, forKey: .id)
        try container.encode(title, forKey: .title)
        try container.encode(imageUrl, forKey: .imageUrl)
    }
}
