using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.Rendering.VirtualTexturing;

/// <summary>
/// 步骤状态控制(配置步骤初始状态,断线重连步骤状态加载,步骤状态结果实时提交)
/// </summary>
public class StepStateControl : MonoBehaviour
{
    //场景初始化
    //背包初始化
    //提示初始化
    //设备初始化
    //工具和材料初始化
    //自定义初始化

    public static StepStateControl instance;
    List<StepState> m_Steps;

    private void Awake()
    {
        DontDestroyOnLoad(gameObject);
        instance = this;
        m_Steps = transform.GetComponentsInChildren<StepState>(true).ToList();
        m_Steps.ForEach(a=> { a.Init(); });
    }

    ///// <summary>
    ///// 注册科目回调(主要切换场景)
    ///// </summary>
    ///// <param name="systemId"></param>
    ///// <param name="schemeId"></param>
    ///// <param name="subProcessId"></param>
    //public void AddStepState(int systemId, int schemeId, int subProcessId, Action<E_SceneType> callback)
    //{
    //    StepState ss = m_Steps.Find(a => a.systemId == systemId && a.schemeId == schemeId && a.subProcessId== subProcessId);
    //    if(ss!=null)
    //    {
    //        ss.AddResetChangeScene(callback);
    //    }
    //}

    /// <summary>
    /// 注册当前科目里步骤里某个需要初始化的状态脚本
    /// </summary>
    /// <param name="objName"></param>
    public void AddStepStateBase(int[] subProcessIds,string objName,Action<string> callback)
    {
        List<StepState> ss=m_Steps.FindAll(a => a.systemId == GameManager.Instance.systemId && a.schemeId == GameManager.RunModelMgr.schemeID && subProcessIds.Contains(a.subProcessId));
        if (ss.Count >0) 
        {
            ss.ForEach(a=> 
            {
                StepStateBase sb = a.stepStateBases.Find(a => a.gameObject.name == objName);
                if (sb != null)
                {
                    sb.AddResetFunction(callback);
                }
            });
        }
    }

    /// <summary>
    /// 调用初始化步骤
    /// </summary>
    /// <param name="process"></param>
    /// <param name="subProcess"></param>
    /// <param name="step"></param>
    public void InvokeInitStepState(int systemId, int schemeId, int subProcessId)
    {
        StepState tmp=m_Steps.Find(a => a.systemId == systemId && a.schemeId == schemeId && a.subProcessId == subProcessId);
        if (tmp != null)
        {
            Debug.Log("初始化步骤");
            //跳场景
            tmp.InvokeChangeScene();
            //初始化base
            tmp.stepStateBases.ForEach(a => 
            {
                a.InvokeInitStepStae();
            });
        }
    }

    /// <summary>
    /// 提交步骤完成状态
    /// </summary>
    /// <param name="process"></param>
    /// <param name="subProcess"></param>
    /// <param name="step"></param>
    /// <param name="score"></param>
    public void SubmitStepState()
    {

    }
}