using UnityEngine;
using D2D.Core;
using D2D.Utilities;

namespace D2D
{
    public class SetActivityOnGameState : GameStateMachineUser
    {
        [SerializeField] private bool _toggleToActive = true;
        [SerializeField] private float _delay;
        
        public GameObject[] _onRunning;
        public GameObject[] _onWin;
        public GameObject[] _onLose;
        public GameObject[] _onGameFinish;
        public GameObject[] _onReviveOption;

        protected override void OnGameRun() => Show(_onRunning);

        protected override void OnGameFinish() => Show(_onGameFinish);

        protected override void OnGameLose() => Show(_onLose,_onReviveOption); 

        protected override void OnGameWin() => Show(_onWin);
        protected override void OnRevivalState() => Show(_onReviveOption);

        private void Show(GameObject[] parent)
        {
            Debug.Log("Show: " + parent[0].gameObject.name);
            if (parent.IsNullOrEmpty()) 
                return;
            
            foreach (GameObject o in parent)
            {
                float delay = _delay;
                
                if (o == null)
                    continue;

                var window = o.GetComponent<Window>();

                if (window != null)
                    delay = window.OpenDelay;
                    
                if (_toggleToActive)
                    o.On(delay);
                else
                    o.Off(delay);
            }
        }
        private void Show(GameObject[] parent, GameObject[] disableParent)
        {
            
            if (parent.IsNullOrEmpty())
                return;

            foreach (GameObject o in disableParent)
            {
                o.gameObject.SetActive(false);
            }
                foreach (GameObject o in parent)
            {
                float delay = _delay;

                if (o == null)
                    continue;

                var window = o.GetComponent<Window>();

                if (window != null)
                    delay = window.OpenDelay;

                if (_toggleToActive)
                    o.On(delay);
                else
                    o.Off(delay);
            }
        }
    }
}