package com.glass.cuxtomcam;

import android.content.Context;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;

public class SoundEffectPlayer {
	private MediaPlayer mShutter;
	private MediaPlayer mCamcorder;
	private MediaPlayer mCamcorderStop;
	private MediaPlayer mError;

	public void setup(Context ctx) {
		mShutter = createSoundEffect(ctx, R.raw.camera_shutter);
		mCamcorder = createSoundEffect(ctx, R.raw.camcorder);
		mCamcorderStop = createSoundEffect(ctx, R.raw.camcorder_stop);
		mError = createSoundEffect(ctx, R.raw.error);
	}

	public void deconstruct() {
		mShutter.release();
		mShutter = null;
		mCamcorder.release();
		mCamcorder = null;
		mCamcorderStop.release();
		mCamcorderStop = null;
		mError.release();
		mError = null;
	}

	public void shutter() {
		mShutter.start();
	}

	public void camcorder() {
		mCamcorder.start();
	}

	public void camcorderStop() {
		mCamcorderStop.start();
	}

	public void error() {
		mError.start();
	}

	public boolean isPlaying() {
		return mShutter.isPlaying() || mCamcorder.isPlaying()
				|| mCamcorderStop.isPlaying() || mError.isPlaying();
	}

	public void stop() {
		if (mShutter.isPlaying()) {
			mShutter.stop();
		}
		if (mCamcorder.isPlaying()) {
			mCamcorder.stop();
		}
		if (mCamcorderStop.isPlaying()) {
			mCamcorderStop.stop();
		}
		if (mError.isPlaying()) {
			mError.stop();
		}
	}

	public void reset() {
		mShutter.reset();
		mCamcorder.reset();
		mCamcorderStop.reset();
		mError.reset();
	}

	private MediaPlayer createSoundEffect(Context ctx, int resource) {
		final MediaPlayer effect = MediaPlayer.create(ctx, resource);
		effect.setOnCompletionListener(new OnCompletionListener() {
			@Override
			public void onCompletion(MediaPlayer arg0) {
				if (effect != null) {
					effect.seekTo(0);
				}
			}
		});
		return effect;
	}
}