//
//  NativePlayerView.swift
//  Pods
//
//  Created by Asti Manuka on 12/11/23.
//

import AVKit
import PRESTOplay

@objc
@available(tvOS 14.0, *)
public class ApplePlayerView: UIView {

    // MARK: Lifecycle

    deinit {
        destroy()
    }

    public override init(frame: CGRect) {
        super.init(frame: frame)
    }

    public required init?(coder _: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    // MARK: Public

    @objc
    public override var bounds: CGRect {
        didSet {
            guard
                let playerId,
                let player = Repository.shared.players.get(key: playerId)
            else { return }
            player.updateSize(bounds)
        }
    }

    override public func removeFromSuperview() {
        destroy()
        super.removeFromSuperview()
    }

    @objc
    public func setPlayerId(_ playerId: String) {
        self.playerId = playerId

        DispatchQueue.main.async { [weak self] in
            guard let self else { return }
            let player = Repository.shared.players.get(key: playerId)

            player?.attachToView(self)
            player?.updateSize(bounds)
        }
    }

    // MARK: Private

    private var playerId: String?

    private func destroy() {
        guard
            let playerId,
            let player = Repository.shared.players.get(key: playerId)
        else { return }
        player.detachFromView()
    }

}
