package com.aeonmatrix.reactnativeijkplayer;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.res.Resources;
import android.os.Bundle;
import android.util.Log;

import com.aeonmatrix.reactnativeijkplayer.widget.media.IjkVideoView;

import tv.danmaku.ijk.media.player.IMediaPlayer;
import tv.danmaku.ijk.media.player.IjkMediaPlayer;

public class ijkplayerActivity extends Activity {
    private static final String TAG_LOG = "[ijkplayerActivity][_LOG_]";

    private IjkVideoView _ijkVideoView = null;

    private ProgressDialog _loadingDialog = null;

    private String _sLoadingText = "Streaming Loading";

    private String _sErrorText = "Streaming Error";

    private String _sOkText = "Ok";

    private IMediaPlayer.OnErrorListener _playerErrorListener = new IMediaPlayer.OnErrorListener() {
        @Override
        public boolean onError(IMediaPlayer mp, int iframeworkError, int iImplError) {
            Log.v(TAG_LOG, "video onError: " + iframeworkError + ", " + iImplError);

            AlertDialog.Builder dialog = new AlertDialog.Builder(ijkplayerActivity.this);
            dialog.setMessage(_sErrorText + " (" + iframeworkError + ", " + iImplError + ")");
            dialog.setPositiveButton(_sOkText, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    ijkplayerActivity.this.finish();
                }
            });

            _closeLoading();
            dialog.show();

            return true;
        }
    };

    private IMediaPlayer.OnInfoListener _playerInfoListener = new IMediaPlayer.OnInfoListener() {
        @Override
        public boolean onInfo(IMediaPlayer mp, int iArg1, int iArg2) {
            Log.v(TAG_LOG, "video onInfo: " + iArg1 + ", " + iArg2);

            if (iArg1 == IMediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START) {
                _closeLoading();
            }

            return true;
        }
    };

    private void _startPlayer(String sUrl) {
        Log.v(TAG_LOG, "_startPlayer: " + sUrl);

        setContentView(getResources().getIdentifier("activity_ijkplayer", "layout", getPackageName()));

        IjkMediaPlayer.loadLibrariesOnce(null);
        IjkMediaPlayer.native_profileBegin("libijkplayer.so");

        _ijkVideoView = (IjkVideoView) findViewById(getResources().getIdentifier("video_view", "id", getPackageName()));
        if (_ijkVideoView != null) {
            _ijkVideoView.setVideoPath(sUrl);
            _ijkVideoView.setOnErrorListener(_playerErrorListener);
            _ijkVideoView.setOnInfoListener(_playerInfoListener);
            _ijkVideoView.start();
        }
    }

    private void _terminatePlayer() {
        Log.v(TAG_LOG, "_terminatePlayer");

        if (_ijkVideoView != null) {
            _ijkVideoView.stopPlayback();
            _ijkVideoView.release(true);
            _ijkVideoView = null;
        }

        IjkMediaPlayer.native_profileEnd();
    }

    private void _openLoading() {
        _loadingDialog = ProgressDialog.show(ijkplayerActivity.this, "", _sLoadingText, true);
    }

    private void _closeLoading() {
        if (_loadingDialog != null) {
            _loadingDialog.dismiss();
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        Log.v(TAG_LOG, "onCreate");
        super.onCreate(savedInstanceState);

        Bundle extras = getIntent().getExtras();
        if (extras != null) {
            _sLoadingText = extras.getString("S_LOADING");
            _sErrorText = extras.getString("S_ERROR");
            _sOkText = extras.getString("S_OK");

            _openLoading();
            _startPlayer(extras.getString("S_URL"));
        }
        else {
            this.finish();
        }
    }

    @Override
    protected void onStop() {
        Log.v(TAG_LOG, "onStop");
        super.onStop();
        _terminatePlayer();
        this.finish();
    }
}
