package com.laimiux.youtubeplayerexample;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.text.TextUtils;
import android.widget.Toast;

import com.google.android.youtube.player.YouTubeBaseActivity;
import com.google.android.youtube.player.YouTubeInitializationResult;
import com.google.android.youtube.player.YouTubePlayer;
import com.google.android.youtube.player.YouTubePlayerView;

public class PlayerActivity extends YouTubeBaseActivity {
  private static final int RECOVERY_DIALOG_REQUEST = 1;

  public static final String YOUTUBE_DEV_KEY_EXTRA = "youtube_dev_key";
  public static final String VIDEO_ID_EXTRA = "video_id";

  private YouTubePlayerView youtubePlayerView;

  // Video variables.
  private String youtubeDevKey;
  private String videoId;


  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    youtubeDevKey = getIntent().getStringExtra(YOUTUBE_DEV_KEY_EXTRA);

    if (TextUtils.isEmpty(youtubeDevKey)) {
      throw new IllegalStateException("You need to pass a valid youtube_dev_key");
    }

    videoId = getIntent().getStringExtra(VIDEO_ID_EXTRA);

    if (TextUtils.isEmpty(videoId)) {
      throw new IllegalStateException("You need to pass a valid video_id");
    }

    setContentView(R.layout.youtube_player_view_container);

    youtubePlayerView = (YouTubePlayerView) findViewById(R.id.youtube_player_view);

    initializeVideo();
  }

  private void initializeVideo() {
    youtubePlayerView.initialize(youtubeDevKey, new YouTubePlayer.OnInitializedListener() {
      @Override
      public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean b) {
        youTubePlayer.loadVideo(videoId);
      }

      @Override
      public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult errorReason) {

        if (errorReason.isUserRecoverableError()) {
          errorReason.getErrorDialog(PlayerActivity.this, RECOVERY_DIALOG_REQUEST).show();
        } else {
          String errorMessage = String.format(getString(R.string.error_player), errorReason.toString());
          Toast.makeText(PlayerActivity.this, errorMessage, Toast.LENGTH_LONG).show();
        }
      }
    });
  }


  @Override
  public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    youtubePlayerView.onConfigurationChanged(newConfig);
  }

  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == RECOVERY_DIALOG_REQUEST) {
//            // Retry initialization if user performed a recovery action
      initializeVideo();
    }
  }

  public static void showPlayer(Context context, String youtubeDevKey, String videoId) {
    Intent intent = new Intent(context, PlayerActivity.class);
    intent.putExtra(YOUTUBE_DEV_KEY_EXTRA, youtubeDevKey);
    intent.putExtra(VIDEO_ID_EXTRA, videoId);
    context.startActivity(intent);
  }
}