using System;
using TMPro;
using UnityEngine;
using UnityEngine.UI;

public class Player : MonoBehaviour
{

    public TextMeshProUGUI musicName;          //显示歌曲的名字及歌手
    public TextMeshProUGUI nowTime;            //显示歌曲已播放的时间长度
    public TextMeshProUGUI allTime;            //显示当前歌曲的总时间长度
    public Slider slid;             //进度条
    public Transform buttons;       //按钮所在的集合体
    public AudioClip[] auc;         //存放歌曲的数组
    public AudioSource aus;         //音频播放器          

    private int currentHour, currentMinute, currentSecond;          //已播放的时间（时、分、秒）
    private int clipHour, clipMinute, clipSecond;                   //总时间（时、分、秒）

    public static Player _instance;

    void Start()
    {
        _instance = this;

        aus.Stop();                                                 //开始运行时不播放，点播放键才开始播放

        #region 注：该方式虽然可以直接达到拖动进度条就播放到进度条当前的音乐，但会产生滋滋啦啦的杂音，是因为进度条value变化，使之不断调用onValueChanged，从而让音乐的进度发生了变化，音乐前后颠倒，不断重叠
        ///
        /// 所以新建了个DragSlider脚本，挂在进度条上，来实现拖动播放的效果
        ///
        //slid.onValueChanged.AddListener(delegate
        //{
        //    //加上之后，避免拖动进度条到最后不松手时报错
        //    if (slid.value == 1)
        //        return;
        //    //给进度条添加事件监听，每当拖动进度条，歌曲从相应的位置播放
        //    aus.time = slid.value * aus.clip.length;
        //});

        buttons.GetComponent<Button>().onClick.AddListener(Play);
        #endregion
        
    }
    void Update()
    {
        //当前播放过的时间
        nowtime();
        //当前正在播放的音频的总时间
        alltime();
        //当前正在播放的音乐
        nowMusic();
    }
    void nowtime()//当前播放过的时间
    {
        currentHour = (int)aus.time / 3600; //时
        currentMinute = (int)(aus.time - currentHour * 3600) / 60;//分
        currentSecond = (int)(aus.time - currentHour * 3600 - currentMinute * 60);//秒

        //显示当前播放过的时间
        nowTime.text = aus.time.ToString();
        //进度条变化
        //(之后更新版)如果当前没有拖拽进度条
        //
    }
    void alltime()//歌曲总时间
    {
        //slid.value = 0;
        clipHour = (int)aus.clip.length / 3600;//时
        clipMinute = (int)(aus.clip.length - clipHour * 3600) / 60;//分
        clipSecond = (int)(aus.clip.length - clipHour * 3600 - clipMinute * 60);//秒
        //显示歌曲总时间
        allTime.text = string.Format("{0:D2}:{1:D2}:{2:D2}",
            clipHour, clipMinute, clipSecond);
    }
    //private void LastMusic()            //上一曲
    //{
    //    index--;                        //索引减一
    //    //若索引等于-1，即当前播放的音频是aus数组列表的第一首，则上一首应为aus数组列表的最后一首
    //    if (index == -1)
    //        index = auc.Length - 1;
    //    aus.clip = auc[index];          //音频播放器的音频为aus数组中索引对应的音频
    //    slid.value = 0;                 //初始化进度条
    //    aus.time = 0;                   //初始化音乐的播放时间（从头开始播）
    //    aus.Play();                     //播放音频
    //}
    private void Pause()                //暂停
    {
        aus.Pause();
    }
    private void Play()                 //播放
    {
        //如果当前正在播放，则返回
        if (aus.isPlaying)
            return;
        aus.Play();
    }
    void nowMusic()                     //当前的音频
    {
        AudioClip clip = aus.clip;      //当前播放的音频
        string n = aus.clip.name;       //当前播放的音频的名字
        //string[] na = n.Split('-');     //以“-”为分割点，把音频名分为若干部分

        //显示当前正在播放的歌曲的名字【歌曲名（默认字体，25号）+歌手名(默认字体，18号，红色)的形式】
        musicName.text = n;

        //index = Array.IndexOf(auc, clip);//当前播放的音频在aus数组中的索引
        /*Slider(); */                       //当进度条走到最后时，播放下一曲
    }

}
