using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using UnityEngine;

/// <summary>
/// 流程类
/// </summary>
public class D_Process : I_Enter, I_Exit
{
    #region 变量
    /// <summary>
    /// 自身Id
    /// </summary>
    public int id;

    /// <summary>
    /// 流程Id
    /// </summary>
    public int schemeId;

    /// <summary>
    /// 流程名称
    /// </summary>
    public string processName;



    #endregion


    /// <summary>
    /// 存放流程的子流程
    /// </summary>
    public List<D_SubProcess> subProcesses = new List<D_SubProcess>();

    /// <summary>
    /// 当前子流程
    /// </summary>
    private D_SubProcess currentSubProcess;

    /// <summary>
    /// 当前子流程
    /// </summary>
    public D_SubProcess CurrentSubProcess
    {
        get => currentSubProcess;
        set
        {
            currentSubProcess = value;
            CurrentSubProcessId = currentSubProcess.id;
        }
    }

    /// <summary>
    /// 当前子流程Id
    /// </summary>
    private int currentSubProcessId;

    /// <summary>
    /// 当前子流程Id
    /// </summary>
    public int CurrentSubProcessId
    {
        get => currentSubProcessId;
        set
        {
            currentSubProcessId = value;
            GameManager.ProcessMgr.subProcessId = currentSubProcessId;
        }
    }

    /// <summary>
    /// 初始化
    /// </summary>
    public void Init()
    {
        if (subProcesses == null || subProcesses.Count == 0)
            return;
        CurrentSubProcess = subProcesses[0];
        CurrentSubProcess.Init();
    }

    /// <summary>
    /// 切换子流程 
    /// </summary>
    public void HandoverSubProcess(int subProcessId, int subProcessStepId = 0)
    {
        if (CurrentSubProcess != null)
            CurrentSubProcess.Exit();
        CurrentSubProcess = GetSubProcess(subProcessId);
        CurrentSubProcess.Enter();
        //UnityEngine.Debug.Log("切换子流程到:" + subProcessId);
        if (subProcessStepId == 0)
            CurrentSubProcess.HandoverSubProcessStep(CurrentSubProcess.subProcessStepes[0].id);
        else
            CurrentSubProcess.HandoverSubProcessStep(subProcessStepId);
    }
    //public void HandoverSubProcess(int subProcessId)
    //{
    //    if (CurrentSubProcess != null)
    //        CurrentSubProcess.Exit();
    //    CurrentSubProcess = GetSubProcess(subProcessId);
    //    CurrentSubProcess.Enter();
    //    UnityEngine.Debug.Log("切换子流程到:" + subProcessId);
    //}

    /// <summary>
    /// 根据id获取 子流程对象
    /// </summary>
    /// <param name="processId"></param>
    /// <returns></returns>
    private D_SubProcess GetSubProcess(int subProcessId)
    {
        for (int i = 0; i < subProcesses.Count; i++)
        {
            if (subProcesses[i].id == subProcessId)
            {
                return subProcesses[i];
            }
        }
        return null;
    }

    /// <summary>
    /// 进入流程
    /// </summary>
    public void Enter()
    {
        //UnityEngine.Debug.Log("进入当前流程:" + id + "_" + processName);
    }

    /// <summary>
    /// 退出流程
    /// </summary>
    public void Exit()
    {
        //UnityEngine.Debug.Log("退出当前流程:" + id + "_" + processName);
    }
}