using System;
using UnityEngine;
using Zenject;

namespace FlappyBird.Core
{
    public class GameManager : IGameManager, IInitializable
    {
        public GameState CurrentState { get; private set; } = GameState.Menu;

        public event Action<GameState> OnGameStateChanged;

        public void Initialize()
        {
            CurrentState = GameState.Menu;
            Debug.Log($"Gameplay state: {CurrentState}");
        }

        public void StartGame()
        {
            if (CurrentState != GameState.Menu)
            {
                return;
            }

            TransitionTo(GameState.Playing);
        }

        public void GameOver()
        {
            if (CurrentState != GameState.Playing)
            {
                return;
            }

            TransitionTo(GameState.GameOver);
        }

        public void ReturnToMenu()
        {
            if (CurrentState == GameState.Menu)
            {
                return;
            }

            TransitionTo(GameState.Menu);
        }

        private void TransitionTo(GameState state)
        {
            if (CurrentState == state)
            {
                return;
            }

            CurrentState = state;
            Debug.Log($"Gameplay state: {CurrentState}");
            OnGameStateChanged?.Invoke(CurrentState);
        }
    }
}
