package com.castlabs.reactnative.arch_legacy;

import android.os.Build;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import com.castlabs.reactnative.player.Player;
import com.castlabs.reactnative.playerview.PlayerView;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.module.annotations.ReactModule;
import com.facebook.react.uimanager.ThemedReactContext;
import com.facebook.react.uimanager.ViewGroupManager;

import com.facebook.react.uimanager.annotations.ReactProp;
import java.util.Map;

/**
 * The view manager for {@link PlayerView}.
 */
@RequiresApi(api = Build.VERSION_CODES.N)
@ReactModule(name = PlayerViewManager.REACT_CLASS)
public class PlayerViewManager extends ViewGroupManager<PlayerView> {

    public static final String REACT_CLASS = "PlayerView";

    private final Map<String, Player> playerInstanceManager;
    private final Map<String, PlayerView> playerViewInstanceManager;

    public PlayerViewManager(
            @NonNull ReactApplicationContext context,
            @NonNull Map<String, Player> playerInstanceManager,
            @NonNull Map<String, PlayerView> playerViewInstanceManager
    ) {
        this.playerInstanceManager = playerInstanceManager;
        this.playerViewInstanceManager = playerViewInstanceManager;
    }

    @Override
    @NonNull
    public String getName() {
        return REACT_CLASS;
    }

    @NonNull
    @Override
    protected PlayerView createViewInstance(@NonNull ThemedReactContext context) {
        final PlayerView playerView = new PlayerView(
                context,
                null,
                playerInstanceManager
        );

        playerViewInstanceManager.put(playerView.id, playerView);

        return playerView;
    }

    @Override
    public void onDropViewInstance(@NonNull PlayerView playerView) {
        super.onDropViewInstance(playerView);
        playerView.release();
        playerViewInstanceManager.remove(playerView.id);
    }

    @ReactProp(name = "playerId")
    public void setPlayerId(PlayerView view, String newPlayerId) {
        view.setPlayerId(newPlayerId);
    }
}
