import AVFoundation
import Defaults
import Foundation
import SwiftyJSON

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

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

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

    var detailsLoaded: Bool {
        !subscriptionsString.isNil
    }

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

        return subscriptionsText
    }

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