open class BasePlayerExtension: NSObject, PlayerExtension {
    public weak var player: (any PlayerProtocol)?
    public weak var playerEventEmitter: PlayerEventEmitter?

    public init(player: PlayerProtocol, playerEventEmitter: PlayerEventEmitter) {
        self.player = player
        self.playerEventEmitter = playerEventEmitter
    }

    deinit {
        destroy()
    }

    open func onContentWillLoad(
        jsonPlayerConfiguration: [String: Any]
    ) throws {

    }

    open func onContentLoaded() {

    }

    open func onPositionChanged(positionSec: Double, durationSec: Double, isLive: Bool, liveStartTime: Double?, seekRangeStart: Double?, seekRangeEnd: Double?) {

    }

    open func onPlayerWillStop() {

    }

    open func onPlayerWillDestroy() {
        destroy()
    }

    open func destroy() {
        player = nil
        playerEventEmitter = nil
    }
}
