using System.Collections.Generic;
using UnityEngine;
using WS;
[ObjectSystem]
public class SceneDataSaveComponentAwakSystem : AwakeSystem<SceneDataSaveComponent>
{
    public override void Awake(SceneDataSaveComponent self)
    {
        self.Awake();
    }
}

public class SceneDataSaveComponent : SingleComponent<SceneDataSaveComponent>
{
    private Dictionary<string, List<SceneData>> data = new Dictionary<string, List<SceneData>>();
    public class SceneData
    {
        public string objName;
        public string animName;
    }
    public void Awake()
    {

    }
    /// <summary>添加</summary>
    public void AddSceneData(string sceneName, string objName, string animName)
    {
        if (data.ContainsKey(sceneName))
        {
            if (data[sceneName].Find(x=>x.objName== objName)==null)
            {
                data[sceneName].Add(new SceneData() { objName = objName, animName = animName });
            }
            else
            {
                int index = data[sceneName].FindIndex(x => x.objName == objName);
                data[sceneName][index].animName = animName;
            }
        }
        else
        {
            data.Add(sceneName, new List<SceneData>());
            data[sceneName].Add(new SceneData() { objName = objName, animName = animName });
        }
    }
    /// <summary>删除流程</summary>
    public void RemoveSceneData(string sceneName, string objName, string animName)
    {
        if (data.ContainsKey(sceneName))
        {
            var d = data[sceneName].FindAll(x => x.objName == objName);
            if (d != null && d.Count != 0 && d.Find(x => x.animName == animName) != null)
            {
                data[sceneName].Remove(d.Find(x => x.animName == animName));
            }
        }
    }
    ///<summary>加载场景数据</summary>
    public void LoadScene(string sceneName)
    {
        if (data.ContainsKey(sceneName))
        {
            var d = data[sceneName];
            for (int i = 0; i < d.Count; i++)
            {
                var InteractObj = GameObject.Find(d[i].objName);
                if (InteractObj != null)
                {
                    var anim = InteractObj.transform.GetComponent<Animator>();
                    var infos = anim.runtimeAnimatorController.animationClips;
                    for (int j = 0;j<infos.Length;j++)
                    {
                        var info = infos[j];
                        if(info.name== d[i].animName)
                        {
                            anim.Play(d[i].animName, -1, info.length);
                        }
                    }
                  
                }
            }
        }
    }
    ///<summary>清除单个场景数据</summary>
    public void RestScene(string sceneName)
    {
        if (data.ContainsKey(sceneName))
        {
            data[sceneName].Clear();
        }
    }
    ///<summary>清除所有数据</summary>
    public void RestAllScene()
    {
        data.Clear();
    }
}