using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;

public class GudieAnimationManager : MonoBehaviour
{
    private Animator _animator;
    private string _currName;
    private List<AvatarAction> _actionList = new List<AvatarAction>();

    private List<string> _actionNameList = new List<string>();

    private float _animationLength = 0;
    public float AnimationLength
    {
        get
        {
            if (_animationLength == 0)
            {
                AnimationClip[] clips = Animator.runtimeAnimatorController.animationClips;
                foreach (AnimationClip clip in clips)
                {
                    if (ActionNameList.Contains(clip.name))
                    {
                        _animationLength += clip.length;
                    }
                }
            }
            return _animationLength;
        }
    }

    public Animator Animator
    {
        get
        {
            if (_animator == null)
            {
                _animator = transform.GetComponentInChildren<Animator>();
            }
            return _animator;
        }
    }

    public List<string> ActionNameList
    {
        get
        {
            if (_actionNameList.Count == 0)
            {
                foreach (var item in _actionList)
                {
                    _actionNameList.Add(item.ToString());
                }
            }
            return _actionNameList;
        }
    }


    private void Awake()
    {
        _animator = transform.GetComponentInChildren<Animator>();
    }



    public void Play(string name)
    {
        Animator.CrossFade(name, 0.5f);
        _currName = name;
    }

    public void PlayCurrentActionList(List<AvatarAction> actionList)
    {
        _actionList = actionList;

        AnimationClip[] clips = Animator.runtimeAnimatorController.animationClips;
        _animationLength = 0;
        foreach (AnimationClip clip in clips)
        {
            if (_actionNameList.Contains(clip.name))
            {
                _animationLength += clip.length;
            }
        }


        Play(Enum.GetName(typeof(AvatarAction), _actionList[YogaManager.Instance.ActionIndex]));
    }

    private void Update()
    {
        if (string.IsNullOrEmpty(_currName) || _actionList.Count == 0)
            return;

        //当未达到指标且动画播放完毕时,重新播放
        if (Animator.GetCurrentAnimatorStateInfo(0).normalizedTime >= 1.0f)
        {
            //如果列表动画index小于列表长度,播放下一个动画
            YogaManager.Instance.ActionIndex++;
            //如果列表动画index大于等于列表长度,说明动画播放完毕,停止播放
            if (YogaManager.Instance.ActionIndex >= YogaManager.Instance.LevelData.Actions.Count)
            {
                Stop();
                return;
            }

            Play(Enum.GetName(typeof(AvatarAction), _actionList[YogaManager.Instance.ActionIndex]));
        }
    }

    private string GetCurrentAnimationName()
    {
        if (Animator == null)
        {
            return string.Empty;
        }
        var clipInfo = Animator.GetCurrentAnimatorClipInfo(0);

        if (clipInfo.Length > 0)
        {
            var name = clipInfo[0].clip.name;
            return name;
        }
        return string.Empty;
    }

    public void Stop()
    {
        Animator.StopPlayback();
    }
}