package com.yixia.camera.demo.ui.record;

import android.app.Activity;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnPreparedListener;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.WindowManager;
import android.widget.Toast;

import com.example.wechat01.R;
import com.yixia.camera.FFMpegUtils;
import com.yixia.camera.demo.VCameraDemoApplication;
import com.yixia.camera.demo.ui.BaseActivity;
import com.yixia.camera.demo.ui.record.views.ProgressView;
import com.yixia.camera.demo.ui.widget.VideoView;
import com.yixia.camera.demo.ui.widget.VideoView.OnPlayStateListener;
import com.yixia.camera.model.MediaObject;
import com.yixia.camera.model.MediaObject.MediaPart;
import com.yixia.camera.util.DeviceUtils;

public class ImportVideoActivity extends BaseActivity implements
		OnClickListener, OnPreparedListener, OnPlayStateListener {

	/** 视频预览 */
	private VideoView mVideoView;
	/** 暂停图标 */
	private View mRecordPlay;
	/** 视频总进度条 */
	private ProgressView mProgressView;

	/** 视频信息 */
	private MediaObject mMediaObject;
	private MediaPart mMediaPart;
	/** 窗体宽度 */
	private int mWindowWidth;
	private String mVideoPath;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		VCameraDemoApplication.getInstance().addActivity(this);
		getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);// 防止锁屏

		String obj = getIntent().getStringExtra("obj");
		mVideoPath = getIntent().getStringExtra("path");
		mMediaObject = restoneMediaObject(obj);
		if (mMediaObject == null) {
			Toast.makeText(this, R.string.record_read_object_faild,
					Toast.LENGTH_SHORT).show();
			finish();
			return;
		}

		mWindowWidth = DeviceUtils.getScreenWidth(this);
		setContentView(R.layout.activity_import_video);

		// ~~~ 绑定控件
		mVideoView = (VideoView) findViewById(R.id.record_preview);
		mRecordPlay = findViewById(R.id.record_play);
		mProgressView = (ProgressView) findViewById(R.id.record_progress);

		// ~~~ 绑定事件
		mVideoView.setOnClickListener(this);
		mVideoView.setOnPreparedListener(this);
		mVideoView.setOnPlayStateListener(this);
		findViewById(R.id.title_left).setOnClickListener(this);
		findViewById(R.id.title_right).setOnClickListener(this);

		findViewById(R.id.record_layout).getLayoutParams().height = mWindowWidth;
		mVideoView.setVideoPath(mVideoPath);
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.title_left:
			finish();
			break;
		case R.id.title_right:
			startEncoding();
			break;
		}
	}

	/** 开始转�?*/
	private void startEncoding() {
		// 检测磁盘空�?		// if (FileUtils.showFileAvailable() < 200) {
		// Toast.makeText(this, R.string.record_camera_check_available_faild,
		// Toast.LENGTH_SHORT).show();
		// return;
		// }

		if (!isFinishing() && mMediaObject != null && mMediaPart != null) {
			new AsyncTask<Void, Void, Boolean>() {

				@Override
				protected void onPreExecute() {
					super.onPreExecute();
					showProgress("",
							getString(R.string.record_camera_progress_message));
				}

				@Override
				protected Boolean doInBackground(Void... params) {
					return FFMpegUtils.importVideo(mMediaPart, mWindowWidth,
							mVideoView.getVideoWidth(),
							mVideoView.getVideoHeight(), 0, 0, true);
				}

				@Override
				protected void onPostExecute(Boolean result) {
					super.onPostExecute(result);
					hideProgress();
					if (result) {
						saveMediaObject(mMediaObject);
						setResult(Activity.RESULT_OK);
						finish();
					} else {
						Toast.makeText(ImportVideoActivity.this,
								R.string.record_video_transcoding_faild,
								Toast.LENGTH_SHORT).show();
					}
				}
			}.execute();
		}
	}

	@Override
	public void onStateChanged(boolean isPlaying) {
		if (isPlaying)
			mRecordPlay.setVisibility(View.GONE);
		else
			mRecordPlay.setVisibility(View.VISIBLE);
	}

	@Override
	public void onPrepared(MediaPlayer mp) {
		if (!isFinishing()) {
			if (mVideoView.getVideoWidth() == 0
					|| mVideoView.getVideoHeight() == 0) {
				Toast.makeText(ImportVideoActivity.this,
						R.string.record_camera_import_video_faild,
						Toast.LENGTH_SHORT).show();
				finish();
				return;
			}

			mVideoView.start();
			mVideoView.setLooping(true);

			int duration = mMediaObject.getMaxDuration()
					- mMediaObject.getDuration();
			if (duration > mVideoView.getDuration())
				duration = mVideoView.getDuration();

			mMediaPart = mMediaObject.buildMediaPart(mVideoPath, duration,
					MediaObject.MEDIA_PART_TYPE_IMPORT_VIDEO);
			mProgressView.setData(mMediaObject);
		}
	}
}