import AVFoundation
import Defaults
import Foundation
import SwiftyJSON

struct Channel: Identifiable, Hashable {
    var id: String
    var name: String
    var videos = [Video]()

    private var subscriptionsCount: Int?
    private var subscriptionsText: String?

    init(json: JSON) {
        id = json["authorId"].stringValue
        name = json["author"].stringValue
        subscriptionsCount = json["subCount"].int
        subscriptionsText = json["subCountText"].string

        if let channelVideos = json.dictionaryValue["latestVideos"] {
            videos = channelVideos.arrayValue.map(Video.init)
        }
    }

    init(id: String, name: String, subscriptionsCount: Int? = nil, videos: [Video] = []) {
        self.id = id
        self.name = name
        self.subscriptionsCount = subscriptionsCount
        self.videos = videos
    }

    var subscriptionsString: String? {
        if subscriptionsCount != nil {
            return subscriptionsCount!.formattedAsAbbreviation()
        }

        return subscriptionsText
    }

    func hash(into hasher: inout Hasher) {
        hasher.combine(id)
    }
}