import Foundation

public struct ListenHistory: Equatable {
    public enum Content: Equatable, Hashable {
        case clip(Clip)
        case playlist(Playlist)
    }

    public var items: [Content]

    public var clips: [Clip] {
        var result: [Clip] = []
        for item in items {
            guard case let .clip(clip) = item else { continue }
            result.append(clip)
        }
        return result
    }

    init(_ remote: GenAPI.ListenHistoryResponse) throws {
        self.items = try {
            var result: [Content] = []
            try remote.history.forEach { item in
                if let content = item.content.object {
                    switch content {
                    case .generatedClipSchema(let clip):
                        try result.append(.clip(Clip(clip)))
                    case .playlistSchema(let playlist):
                        try result.append(.playlist(Playlist(playlist)))
                    }
                }
            }
            return result
        }()
    }
}
