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

namespace mgaia.Utils.Pause
{
    /// <summary>
    /// Behaviour utilizado para pausar logicamente, através de update
    /// </summary>
    /// <owner>Victor</owner>
    public class PausableBehaviour : MonoBehaviour
    {
        public delegate void PauseStateHandler(PausableBehaviour pausableBehaviour);

        public event PauseStateHandler PauseStateChanged;

        private bool _mIsPaused;

        public bool IsPaused
        {
            get { return _mIsPaused; }
        }

        /// <summary>
        /// Callback de update da Unity
        /// </summary>
        private void Update()
        {
            if (IsPaused)
            {
                UpdateWhenNotPaused();
            }
        }

        /// <summary>
        /// Seta se o behaviour deve ser pausado ou não
        /// </summary>
        internal void Pause(bool isPaused)
        {
            _mIsPaused = isPaused;

            OnPauseStateChanged();

            if (PauseStateChanged != null)
            {
                PauseStateChanged(this);
            }
        }

        /// <summary>
        /// Método chamado quando o estado de pause do jogo muda
        /// </summary>
        protected virtual void OnPauseStateChanged() { }

        /// <summary>
        /// Atualiza o behaviour quando o jogo não está pausado
        /// </summary>
        protected virtual void UpdateWhenNotPaused() { }
    }
}