package samsung.com.myplayer;

import android.content.ActivityNotFoundException;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.database.Cursor;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Handler;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.os.IBinder;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.view.MenuItem;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Random;


public class PlayActivity extends AppCompatActivity {

    static MediaPlayer mediaPlayer = new MediaPlayer();
    TextView txtTitle, txtTimeSong, txtTimeTotal, txtArtist;
    SeekBar seekSong;
    ImageButton btnPrev, btnNext, btnPlay, btnRepeat, btnShuffle;
    Animation animation;
    ImageView img;
    int position;
    boolean isShuffle = false;
    boolean isRepeat = false;

    ArrayList<song> arraySong;

    public void setSong(int position) throws IOException {
        mediaPlayer.reset();
        mediaPlayer.setDataSource(arraySong.get(position).getDta());
        txtTitle.setText(arraySong.get(position).getTitle());
        txtArtist.setText(arraySong.get(position).getArtist());
        mediaPlayer.prepare();
    }

    public void SetTimeTotal() {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("mm:ss");
        txtTimeTotal.setText(simpleDateFormat.format(mediaPlayer.getDuration()));
        seekSong.setMax(mediaPlayer.getDuration());
    }

    public void UpdateTimeSong() {
        final Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("mm:ss");
                txtTimeSong.setText(simpleDateFormat.format(mediaPlayer.getCurrentPosition()));
                seekSong.setProgress(mediaPlayer.getCurrentPosition());
                mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                    @Override
                    public void onCompletion(MediaPlayer mp) {

                        btnPlay.setImageResource(R.drawable.ic_play_circle_outline_white_24dp);
                        if(position > arraySong.size()-1)
                        {
                            position = 0;
                        }
                        if (mediaPlayer.isPlaying())
                        {
                            mediaPlayer.stop();
                        }
                        try {
                            if(isRepeat==false){
                                ++position;
                                setSong(position);
                                curpos=position;}
                            else{
                                setSong(curpos);
                            }
                            mediaPlayer.start();
                            btnPlay.setImageResource(R.drawable.ic_pause_circle_outline_white_24dp);
                            SetTimeTotal();
                            UpdateTimeSong();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }


                        if (isShuffle){
                            Random rand = new Random();
                            curpos = rand.nextInt((arraySong.size() - 1) - 0 + 1) + 0;
                            try {
                                setSong(curpos);
                                mp.start();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
//                    else {
//                        if (curpos < arraySong.size() - 1)
//                            curpos++;
//                        else if (curpos == arraySong.size() - 1)
//                            curpos = 0;
//                        try {
//                            setSong(curpos);
//                            mp.start();
//                            btnPlay.setImageResource(R.drawable.ic_pause_circle_outline_white_48dp);
//                            SetTimeTotal();
//                            UpdateTimeSong();
//                        } catch (IOException e) {
//                            Toast.makeText(PlayActivity.this, "Can not play", Toast.LENGTH_LONG).show();
//                        }
//                    }
                    }

                });


                handler.postDelayed(this, 500);
            }
        }, 100);

    }

    int curpos = -1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
            finish();
            return;
        }

        setContentView(R.layout.activity_play);

        btnNext = (ImageButton) findViewById(R.id.btn_next);
        btnPrev = (ImageButton) findViewById(R.id.btn_prev);
        txtTitle = (TextView) findViewById(R.id.title);
        btnPlay = (ImageButton) findViewById(R.id.btn_play);
        txtTimeSong = (TextView) findViewById(R.id.time_song);
        txtTimeTotal = (TextView) findViewById(R.id.time_total);
        txtArtist = (TextView) findViewById(R.id.artist);
        btnRepeat = (ImageButton)findViewById(R.id.btn_repeat);
        btnShuffle = (ImageButton)findViewById(R.id.btn_suffle);


        Intent intent = getIntent();
        position = intent.getIntExtra("songid", -1);
        arraySong = new ArrayList<song>();
        arraySong = (ArrayList<song>) intent.getSerializableExtra("arraysong");
        seekSong = (SeekBar) findViewById(R.id.seekbar_song);
        img = (ImageView) findViewById(R.id.imageViewDisc);
        animation = AnimationUtils.loadAnimation(this, R.anim.disc_rotate);

        if (curpos != position) {
            curpos = position;
            try {
                setSong(curpos);
                mediaPlayer.start();
                btnPlay.setImageResource(R.drawable.ic_pause_circle_outline_white_48dp);
                img.startAnimation(animation);
                SetTimeTotal();
                UpdateTimeSong();
            } catch (IOException e) {
                Toast.makeText(PlayActivity.this, "Can not play", Toast.LENGTH_LONG).show();
            }
        } else {
            try {
                setSong(curpos);
                mediaPlayer.start();
                btnPlay.setImageResource(R.drawable.ic_pause_circle_outline_white_48dp);
                img.startAnimation(animation);
                SetTimeTotal();
                UpdateTimeSong();
            } catch (IOException e) {
                Toast.makeText(PlayActivity.this, "Can not play", Toast.LENGTH_LONG).show();
            }
        }



        btnPlay.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (mediaPlayer.isPlaying()) {
                    mediaPlayer.pause();
                    btnPlay.setImageResource(R.drawable.ic_play_circle_outline_white_48dp);
                    img.clearAnimation();
                    SetTimeTotal();
                    UpdateTimeSong();
                } else {
                    mediaPlayer.start();
                    btnPlay.setImageResource(R.drawable.ic_pause_circle_outline_white_48dp);
                    img.startAnimation(animation);
                    SetTimeTotal();
                    UpdateTimeSong();
                }

            }
        });

        btnNext.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (position < arraySong.size() - 1)
                    position++;
                else if (position == arraySong.size() - 1)
                    position = 0;
                try {
                    setSong(position);
                    mediaPlayer.start();
                    btnPlay.setImageResource(R.drawable.ic_pause_circle_outline_white_48dp);
                    SetTimeTotal();
                    UpdateTimeSong();
                } catch (IOException e) {
                    Toast.makeText(PlayActivity.this, "Can not play", Toast.LENGTH_LONG).show();
                }
            }
        });

        btnPrev.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (position > 0)
                    position--;
                else if (position == 0)
                    position = arraySong.size() - 1;
                try {
                    setSong(position);
                    mediaPlayer.start();
                    btnPlay.setImageResource(R.drawable.ic_pause_circle_outline_white_48dp);
                    SetTimeTotal();
                    UpdateTimeSong();
                } catch (IOException e) {
                    Toast.makeText(PlayActivity.this, "Can not play", Toast.LENGTH_LONG).show();
                }
            }
        });

        seekSong.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int i, boolean b) {

            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                mediaPlayer.seekTo(seekSong.getProgress());
            }
        });

        btnRepeat.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                if(isRepeat){
                    isRepeat = false;
                    SetTimeTotal();
                    UpdateTimeSong();
                    Toast.makeText(getApplicationContext(), "Repeat is OFF", Toast.LENGTH_SHORT).show();
                    btnRepeat.setImageResource(R.drawable.ic_repeat_white_48dp);
                }else{
                    // make repeat to true

                    SetTimeTotal();
                    UpdateTimeSong();
                    Toast.makeText(getApplicationContext(), "Repeat is ON", Toast.LENGTH_SHORT).show();
                    // make shuffle to false
                    isRepeat = true;
                    isShuffle = false;
                    btnRepeat.setImageResource(R.drawable.ic_repeat_one_white_48dp);

                }
            }
        });

        btnShuffle.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                if(isShuffle){
                    isShuffle = false;
                    Toast.makeText(getApplicationContext(), "Shuffle is OFF", Toast.LENGTH_SHORT).show();
                    btnShuffle.setImageResource(R.drawable.ic_trending_flat_white_48dp);
                }else{
                    // make repeat to true
                    isShuffle= true;
                    Toast.makeText(getApplicationContext(), "Shuffle is ON", Toast.LENGTH_SHORT).show();
                    // make shuffle to false
                    isRepeat = false;
                    btnShuffle.setImageResource(R.drawable.ic_shuffle_white_48dp);

                }
            }
        });
    }




}