package com.syan.agora;

import android.content.Context;
import android.graphics.Color;
import android.util.Log;
import android.view.SurfaceView;
import android.view.View;
import android.widget.FrameLayout;

public class AgoraViewContainer extends FrameLayout {
  public View maskView;
  public AgoraVideoView agoraVideoView;
  public SurfaceView surfaceView;

  public AgoraViewContainer(Context context) {
    super(context);
    initViews(context);
  }

  private void initViews(Context context) {
    maskView = new View(context);
    agoraVideoView = new AgoraVideoView(context);
    maskView.setBackgroundColor(Color.BLACK);
    FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);
    maskView.setLayoutParams(lp);
    agoraVideoView.setLayoutParams(lp);
    addView(agoraVideoView);
    addView(maskView);
  }

  public boolean isShowLocalVideo() {
    return agoraVideoView.isShowLocalVideo();
  }

  public void setShowLocalVideo(boolean showLocalVideo) {
    agoraVideoView.setShowLocalVideo(showLocalVideo);
    if (showLocalVideo) {
      ViewUtils.setVisibility(maskView, agoraVideoView.isShowMask() ? View.VISIBLE : View.GONE);
      AgoraManager.getInstance().setupLocalVideo(agoraVideoView.getRenderMode());
      surfaceView = AgoraManager.getInstance().getLocalSurfaceView();
      Log.d("RtcEngine", "agoraVideoView.getZOrderMediaOverlay() :" + agoraVideoView.getZOrderMediaOverlay());
      //      surfaceView.setZOrderOnTop(true);
      surfaceView.setZOrderMediaOverlay(agoraVideoView.getZOrderMediaOverlay());
      postDelayed(new Runnable() {
        @Override
        public void run() {
          agoraVideoView.removeAllViews();
          agoraVideoView.addView(surfaceView);
        }
      }, agoraVideoView.isShowMask() ? 120 : 0);
      if (agoraVideoView.isShowMask()) {
        postDelayed(new Runnable() {
          @Override
          public void run() {
            Log.d("RtcEngine", "postDelayed local addView getMaskDuration : " + agoraVideoView.getMaskDuration());
            ViewUtils.setVisibility(maskView, View.GONE);
          }
        }, agoraVideoView.getMaskDuration());
      } else {
        Log.d("RtcEngine", "postDelayed local addView direct  ");
        ViewUtils.setVisibility(maskView, View.GONE);
      }
    }
  }

  public Integer getRenderMode() {
    return agoraVideoView.getRenderMode();
  }

  public void setRenderMode(Integer renderMode) {
    agoraVideoView.setRenderMode(renderMode);
  }

  public Integer getRemoteUid() {
    return agoraVideoView.getRemoteUid();
  }

  public void setRemoteUid(Integer remoteUid) {
    agoraVideoView.setRemoteUid(remoteUid);
    Log.d("RtcEngine", "setRemoteUid  : " + remoteUid + " isShowMask : " + agoraVideoView.isShowMask());
    if (remoteUid != 0) {
      ViewUtils.setVisibility(maskView, agoraVideoView.isShowMask() ? View.VISIBLE : View.GONE);
      AgoraManager.getInstance().setupRemoteVideo(remoteUid, agoraVideoView.getRenderMode());
      surfaceView = AgoraManager.getInstance().getSurfaceView(remoteUid);
      //      surfaceView.setZOrderOnTop(true);
      surfaceView.setZOrderMediaOverlay(agoraVideoView.getZOrderMediaOverlay());
      postDelayed(new Runnable() {
        @Override
        public void run() {
          agoraVideoView.removeAllViews();
          agoraVideoView.addView(surfaceView);
        }
      }, agoraVideoView.isShowMask() ? 120 : 0);
      if (agoraVideoView.isShowMask()) {
        agoraVideoView.postDelayed(new Runnable() {
          @Override
          public void run() {
            Log.d("RtcEngine", "postDelayed Remote GONE getMaskDuration : " + agoraVideoView.getMaskDuration());
            maskView.setVisibility(View.GONE);
          }
        }, agoraVideoView.getMaskDuration());
      } else {
        Log.d("RtcEngine", "postDelayed Remote GONE direct  ");
        ViewUtils.setVisibility(maskView, View.GONE);
      }
    }
  }

  public boolean getZOrderMediaOverlay() {
    return agoraVideoView.getZOrderMediaOverlay();
  }

  public void setZOrderMediaOverlay(boolean zOrderMediaOverlay) {
    agoraVideoView.setZOrderMediaOverlay(zOrderMediaOverlay);
  }

  public boolean isShowMask() {
    return agoraVideoView.isShowMask();
  }

  public void setShowMask(boolean showMask) {
    agoraVideoView.setShowMask(isShowMask());
  }

  public Integer getMaskDuration() {
    return agoraVideoView.getMaskDuration();
  }

  public void setMaskDuration(Integer maskDuration) {
    agoraVideoView.setMaskDuration(maskDuration);
  }

}
