﻿using UnityEngine;
using Yumon.Template.Lite.Internal;

namespace Yumon.Template.Lite
{
    /// <summary>
    ///     Abstract class for gameplay logic. Inherit from this class to receive callbacks from the
    ///     <see cref="YumonGameManager" /> OnLevelStart and OnLevelEnd events.
    ///     Your logic should be implemented in <see cref="OnStartLevel" /> and <see cref="OnEndLevel" />.
    ///     If you don't want to inherit from this class, you can implement the <see cref="IYumonGameplay" /> interface
    ///     but you will have to manually subscribe to the <see cref="YumonGameManager" /> OnLevelStart and OnLevelEnd events.
    /// </summary>
    public abstract class YumonGameplay : MonoBehaviour, IYumonGameplay
    {
        void OnEnable()
        {
            YumonGameManager.OnLevelStart += OnStartLevel;
            YumonGameManager.OnLevelEnd += OnEndLevel;
            YumonGameManager.OnReturnToHome += OnReturnToHome;
        }

        void OnDisable()
        {
            YumonGameManager.OnLevelStart -= OnStartLevel;
            YumonGameManager.OnLevelEnd -= OnEndLevel;
            YumonGameManager.OnReturnToHome -= OnReturnToHome;
        }

        public virtual void OnStartLevel() {}
        public virtual void OnEndLevel() {}
        public virtual void OnReturnToHome() {}
    }
}
