package com.test.music;

import java.io.IOException;
import java.util.Iterator;
import java.util.Set;


import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnPreparedListener;
import android.os.Bundle;
import android.os.Handler;
import android.os.Handler.Callback;
import android.os.Message;
import android.util.Log;
import android.view.View.OnClickListener;
import android.view.View;
import android.view.Window;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;
import android.widget.Toast;

public class Playsong extends Activity  {
	String song = null;
	MediaPlayer mm = null;
	private String TAG = "Playsong";
	private ImageView playpause=null;
	private ImageView next=null;
	private ImageView previous=null;
	private int STATE;
	private SeekBar iseekbar=null;
	private TextView com_time=null;
	private TextView max_time=null;
	public static final int SHIFT_PREVIOUS_SONG = -1;
	public static final int SHIFT_NEXT_SONG = 1;
    private Handler mUiHandler;
    private static final int MSG_UPDATE_PROGRESS = 0x1;
	private Utilities utils;
	
	 public static final String SERVICECMD = "com.android.music.musicservicecommand";

	public static final String CMDNAME = "command";
	public static final String CMDTOGGLEPAUSE = "togglepause";
	public static final String CMDSTOP = "stop";
	public static final String CMDPAUSE = "pause";
	public static final String CMDPREVIOUS = "previous";
	public static final String CMDNEXT = "next";



	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		/*
		 * Bundle bb = getIntent().getExtras(); if (null != bb) { song =
		 * bb.getString("filepath"); song=song.replace(" ","%20"); }
		 */
		// MyDebug.i("----","=========song========="+song);
		setContentView(R.layout.player);
		  mUiHandler = new Handler();
		Playbackservice.addActivity(this);
		playpause=(ImageView) findViewById(R.id.play);
		next=(ImageView) findViewById(R.id.next);
		previous=(ImageView) findViewById(R.id.previous);
		iseekbar=(SeekBar) findViewById(R.id.seekBar1);
		com_time=(TextView) findViewById(R.id.com_time);
		max_time=(TextView) findViewById(R.id.max_time);
		
		iseekbar.setOnSeekBarChangeListener(seekbarlistener);
		
		playpause.setOnClickListener(mlistener);
		next.setOnClickListener(mlistener);
		previous.setOnClickListener(mlistener);
		utils = new Utilities();

	}
	
	
	
	/*Runnable rr=new Runnable() {
		
		@Override
		public void run() {
			
				//MyDebug.i("","=============runnable============"+Playbackservice.get(Playsong.this).getposition());
				 iseekbar.setProgress(Playbackservice.get(Playsong.this).getposition());
				 com_time.setText(String.format("%02d", Playbackservice.get(Playsong.this).getposition() / 60000) + ":" + String.format(
	                     "%02.0f", (double) ((Playbackservice.get(Playsong.this).getposition() / 1000) % 60)));
				 max_time.setText(String.format("%02d", Playbackservice.get(Playsong.this).getcomplietposition() / 60000) + ":" + String.format(
	                     "%02.0f", (double) ((Playbackservice.get(Playsong.this).getcomplietposition() / 1000) % 60)));
				 
				 mUiHandler.removeCallbacks(rr);
				 mUiHandler.postDelayed(rr,1000);
			
			
		}
	};*/
	 private BroadcastReceiver mReceiver = new BroadcastReceiver() {

		 @Override
		 public void onReceive(Context context, Intent intent)
		 {
			 
			 Log.i(TAG,"===================onrecied called=============");
			 Bundle b = intent.getExtras();
		        Set<String> set = b.keySet();
		        Iterator it = set.iterator();
		        while(it.hasNext()==true){
		            Toast.makeText(getApplicationContext(),""+it.next(), Toast.LENGTH_SHORT).show();
		        }
			 
			 
			/* String action = intent.getAction();
			 String cmd = intent.getStringExtra("command");
			 Log.v("tag ", action + " / " + cmd);
			 String artist = intent.getStringExtra("artist");
			 String album = intent.getStringExtra("album");
			 String track = intent.getStringExtra("track");
			 Log.v("tag",artist+":"+album+":"+track);
			 Toast.makeText(Playsong.this,track,Toast.LENGTH_SHORT).show(); */

		 }
		 };
	
	public void getsongdetails(){
		//com.sec.android.app.music.player.service.CorePlayerService

		IntentFilter iF = new IntentFilter();
		iF.addAction("com.android.music.metachanged");
		iF.addAction("com.android.music.playstatechanged");
		iF.addAction("com.android.music.playbackcomplete");
		iF.addAction("com.android.music.queuechanged");





		registerReceiver(mReceiver, iF);
	}
	
	OnSeekBarChangeListener seekbarlistener=new OnSeekBarChangeListener() {
		
		@Override
		public void onStopTrackingTouch(SeekBar seekBar) {
			mUiHandler.removeCallbacks(mUpdateTimeTask);
			int totalDuration = Playbackservice.get(Playsong.this).getcomplietposition();
			int currentPosition = utils.progressToTimer(seekBar.getProgress(), totalDuration);
			
			// forward or backward to certain seconds
			Playbackservice.get(Playsong.this).seekto(currentPosition);
			
			// update timer progress again
			updateProgressBar();
		}
		
		@Override
		public void onStartTrackingTouch(SeekBar seekBar) {
			mUiHandler.removeCallbacks(mUpdateTimeTask);
			MyDebug.i("","=============onstart============");
		}
		
		@Override
		public void onProgressChanged(SeekBar seekBar, int progress,
				boolean fromUser) {
			MyDebug.i("","=============onprogresschanged============");
			}

		
	};
	
	
	/**
	 * Update timer on seekbar
	 * */
	public void updateProgressBar() {
        mUiHandler.postDelayed(mUpdateTimeTask, 100);        
    }	
	
	
	
	private Runnable mUpdateTimeTask = new Runnable() {
		   public void run() {
			   
			   if(Playbackservice.get(Playsong.this).ispalying()){
				   long totalDuration = Playbackservice.get(Playsong.this).getcomplietposition();
				   long currentDuration = Playbackservice.get(Playsong.this).getposition();
				  
				   // Displaying Total Duration time
				   com_time.setText(""+utils.milliSecondsToTimer(currentDuration));
				   // Displaying time completed playing
				   max_time.setText(""+utils.milliSecondsToTimer(totalDuration));
				   
				   // Updating progress bar
				   int progress = (int)(utils.getProgressPercentage(currentDuration, totalDuration));
				   //Log.d("Progress", ""+progress);
				   iseekbar.setProgress(progress);
					getsongdetails();

			   }
			   
			   
			   // Running this thread after 100 milliseconds
		       mUiHandler.postDelayed(mUpdateTimeTask, 100);
		   }
		};
	
	
	private void updateseekbar() {
       	
       	 mUiHandler.removeMessages(MSG_UPDATE_PROGRESS);
         mUiHandler.sendEmptyMessageDelayed(MSG_UPDATE_PROGRESS, 500);
	}
	
	OnClickListener mlistener=new OnClickListener() {
		
		@Override
		public void onClick(View v) {
			
          if(v.getId()==playpause.getId()){
        	  MyDebug.i(TAG,"================palypause===========");
        	Playbackservice service2=Playbackservice.get(Playsong.this);
        	STATE=service2.playerActions(); 
        	setstate(STATE);
        	  
          }else if(v.getId()==next.getId()){
        	  Playbackservice.get(Playsong.this).shiftcurrentsong(SHIFT_NEXT_SONG);
        	  setstate(1);
          }else if(v.getId()==previous.getId()){
        	  Playbackservice.get(Playsong.this).shiftcurrentsong(SHIFT_PREVIOUS_SONG);
        	  setstate(1);
          }
			
		}

		
	};

	
	 public boolean handleMessage(Message msg) {
	        switch (msg.what) {
	        case MSG_UPDATE_PROGRESS:
	            updateseekbar();
	            break;
	        }
	        return true;
	    }
	
	protected void setstate(int state) {
		if(state==0){
			  MyDebug.i(TAG,"================pause===========");
			playpause.setImageResource(R.drawable.play);
		}else if(state==1){
			  MyDebug.i(TAG,"================paly===========");
			playpause.setImageResource(R.drawable.pause);
			
		}
	}
	@Override
	protected void onStart() {
		super.onStart();
	
		if (Playbackservice.hasInstance()) {
			MyDebug.i(TAG,
					"===========playback service aleredy started==========");
			Playbackservice service1 = Playbackservice.get(this);
			service1.stopplayer();
			service1.addsong();
			service1.startplayer();
		} else {
			MyDebug.i(TAG,
					"===========playback service newly started==========");
			startService(new Intent(Playsong.this, Playbackservice.class));

		}
		iseekbar.setProgress(0);
		iseekbar.setMax(100);
        updateProgressBar();		
	}

	protected void onDestroy() {
		super.onDestroy();
		Playbackservice.removeActivity(this);

	};

}
