using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
/// 
/// 步骤状态(管理一个步骤下的所有需要初始化的状态)
/// 
public abstract class StepState : MonoBehaviour
{
    [HideInInspector]
    public int systemId;
    [HideInInspector]
    public int schemeId;
    public Dictionary steps=new Dictionary();
    public void Init()
    {
        schemeId = int.Parse(transform.name);
        systemId = int.Parse(transform.parent.name);
    }
    /// 
    /// 跳步骤
    /// 
    /// 从一开始
    public void JumpStep(int num)
    {
        //检查是否跳场景
        InvokeChangeScene(steps[num], isChangeSence =>
        {
            //找到此步骤场景第一个
            int first = steps.First(a => a.Value == steps[num]).Key;
            //从场景第一个开始还原到此步骤
            foreach (var item in steps)
            {
                if(item.Key>=first && item.Key<=num)
                {
                    SetStepState(item.Key,num);
                }
            }
        });
    }
    /// 
    /// 跳场景并且执行场景状态设置
    /// 
    /// 
    /// 
    public void InvokeChangeScene(E_SceneType jumpSence, Action doStepState)
    {
        string sname = "";
        switch (jumpSence)
        {
            case E_SceneType.None:
                return;
            case E_SceneType.Office:
                sname = "03_OfficeScene";
                break;
            case E_SceneType.ToolRoom:
                sname = "04_ToolMaterialScene";
                break;
            case E_SceneType.Site:
                sname = "05_LiveScene";
                break;
            default:
                return;
        }
        if (GameManager.RunModelMgr.SceneType != jumpSence)
        {
            //跳场景
            GameManager.UIMgr.ShowPanel(E_UI_Layer.System);
            GameManager.ScenesMgr.LoadSceneAsyn(sname, () =>
            {
                Debug.Log("步骤场景:" + jumpSence.ToString());
                GameManager.UIMgr.HidePanel();
                GameManager.RunModelMgr.SceneType = jumpSence;
                GameManager.EventMgr.EventTrigger(Enum_EventType.SwitchScene, jumpSence);
                GameManager.EventMgr.EventTrigger(Enum_EventType.SwitchSubProcessStepTriggerID, ProcessManager.Instance.subProcessStepTriggerID);
                doStepState?.Invoke(true);
            });
        }
        else
        {
            doStepState?.Invoke(false);
        }
    }
/// 
/// 执行步骤还原
/// 
/// 要执行的步骤
/// 目标步骤
    public abstract void SetStepState(int num,int lastNum);
}