package com.rnvideoiqrtc;

import android.app.Activity;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.LinearLayout;

import com.facebook.react.bridge.ReactContext;
import com.facebook.react.uimanager.ThemedReactContext;

import java.util.concurrent.ConcurrentHashMap;

import videoiq_android.Controller.EnxPlayerView;
import videoiq_android.Controller.EnxStream;

import static com.facebook.react.bridge.UiThreadUtil.runOnUiThread;

public class EnxPlayerLayout extends FrameLayout {

    Activity activity=null;
    VideoiqRN sharedState;
    ThemedReactContext mReactContext;
    String mStreamId;
    public EnxPlayerLayout(ThemedReactContext reactContext) {
        super(reactContext);
        sharedState = VideoiqRN.getSharedState();
        mReactContext = reactContext;
        //activity = getContext();
        activity=((ReactContext)getContext()).getCurrentActivity();
    }

    public void createPublisherView(String streamId) {
        mStreamId=streamId;
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                //put playerview in hashmap
                ConcurrentHashMap<String, EnxPlayerView> mPlayers = sharedState.getPlayerView();
                EnxPlayerView enxPlayerView = new EnxPlayerView(activity, EnxPlayerView.ScalingType.SCALE_ASPECT_FIT
                        , false);
                mPlayers.put(mStreamId, enxPlayerView);

                FrameLayout mContainer = new FrameLayout(activity);
                mContainer.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT));
                ConcurrentHashMap<String, FrameLayout> mLocalStreamViewContainers = sharedState.getStreamViewContainers();
                mLocalStreamViewContainers.put(mStreamId, mContainer);
                addView(mLocalStreamViewContainers.get(mStreamId), 0);
                if (mLocalStreamViewContainers.get(mStreamId).getChildCount() > 0) {
                    View temp1 = mLocalStreamViewContainers.get(mStreamId).getChildAt(0);
                    mLocalStreamViewContainers.get(mStreamId).removeView(temp1);
                }
                ConcurrentHashMap<String, EnxPlayerView> playerViews = sharedState.getPlayerView();
                mLocalStreamViewContainers.get(mStreamId).addView( playerViews.get(mStreamId));


                //get playerview from hashmap
                ConcurrentHashMap<String, EnxPlayerView> mPlayersView = sharedState.getPlayerView();
                EnxPlayerView enxPlayerView1 = mPlayersView.get(mStreamId);
                if (mStreamId.length() > 2) {
                    ConcurrentHashMap<String, EnxStream> mEnxStream = sharedState.getLocalStream();
                    EnxStream localStream = mEnxStream.get(mStreamId);
                    if (localStream != null) {
                        enxPlayerView1.setZOrderMediaOverlay(true);
                        localStream.attachRenderer(enxPlayerView1);
                    }
                } else {
                    ConcurrentHashMap<String, EnxStream> mEnxStream = sharedState.getRemoteStream();
                    EnxStream remoteStream = mEnxStream.get(mStreamId);
                    remoteStream.attachRenderer(enxPlayerView1);
                }
                requestLayout();
            }
        });
    }
}

