import CoreMedia
import Foundation

final class PlayerTimeModel: ObservableObject {
    static let timePlaceholder = "--:--"

    @Published var currentTime = CMTime.zero
    @Published var duration = CMTime.zero

    var player: PlayerModel?

    var currentPlaybackTime: String {
        if player?.currentItem.isNil ?? true || duration.seconds.isZero {
            return Self.timePlaceholder
        }

        return currentTime.seconds.formattedAsPlaybackTime(allowZero: true) ?? Self.timePlaceholder
    }

    var durationPlaybackTime: String {
        if player?.currentItem.isNil ?? true {
            return Self.timePlaceholder
        }

        return duration.seconds.formattedAsPlaybackTime() ?? Self.timePlaceholder
    }

    var withoutSegmentsPlaybackTime: String {
        guard let withoutSegmentsDuration = player?.playerItemDurationWithoutSponsorSegments?.seconds else {
            return Self.timePlaceholder
        }

        return withoutSegmentsDuration.formattedAsPlaybackTime() ?? Self.timePlaceholder
    }

    var durationAndWithoutSegmentsPlaybackTime: String {
        var durationAndWithoutSegmentsPlaybackTime = "\(durationPlaybackTime)"

        if withoutSegmentsPlaybackTime != durationPlaybackTime {
            durationAndWithoutSegmentsPlaybackTime += " (\(withoutSegmentsPlaybackTime))"
        }

        return durationAndWithoutSegmentsPlaybackTime
    }

    func reset() {
        currentTime = .zero
        duration = .zero
    }
}