import Foundation

class AudioPlayerState : NSObject, Codable{
    @objc dynamic var state :String?
    var currentMillis: Int64?
    var totalMillis: Int64?
    var errorMessage: String?
    var timestamp: Double?
    var remainingTime: Int64?
    
    init(
        state: String = State.NONE.rawValue,
        currentMillis: Int64 = 0,
        totalMillis: Int64  = 0,
        errorMessage: String = "",
        timestamp: Double = 0,
        remainingTime: Int64 = 0
    ) {
        self.state = state
        self.currentMillis = currentMillis
        self.totalMillis = totalMillis
        self.errorMessage = errorMessage
        self.timestamp = timestamp
        self.remainingTime = remainingTime
    }
    
    enum  State: String, Codable {
        case NONE = "NONE",
             LOADING = "LOADING",
             BUFFERING = "BUFFERING",
             READY_TO_PLAY = "READY_TO_PLAY",
             RUNNING = "RUNNING",
             STOPPED = "STOPPED",
             ENDED = "ENDED"
    }    
}

extension Encodable {
    func jsonData1() throws -> Data {
        let encoder = JSONEncoder()
        encoder.outputFormatting = .prettyPrinted
        //encoder.dateEncodingStrategy = .iso8601
        return try encoder.encode(self)
    }
}
