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

namespace mgaia.Utils.StateMachine
{
    /// <summary>
    /// Interface que representa uma máquina de estados
    /// </summary>
    /// <owner>Victor</owner>
    public interface IStateMachine<TOwner>
    {
        /// <summary>
        /// Retorna a chave do estado que está rodando atualmente
        /// </summary>
        object RunningStateKey { get; }

        /// <summary>
        /// Adiciona mais um estado
        /// </summary>
        void AddState(object key, bool isPrioritary, IState<TOwner> state);

        /// <summary>
        /// Seta o estado que deve rodar
        /// </summary>
        void SetState(object key);

        /// <summary>
        /// Notifica a máquina de estados que um estado foi concluido
        /// </summary>
        void NotifyCompletion(object key);
    }
}