using UnityEngine;

namespace DayNightCycle
{
    [RequireComponent(typeof(Light))]
    public class AutomaticLight : MonoBehaviour
    {
        [SerializeField]
        private int _startHour = 18;
        [SerializeField]
        private int _endHour = 6;

        private Light _light;
        private bool _isLightEnabled;

        public int StartHour
        {
            get { return _startHour; }
            set { _startHour = value; }
        }

        public int EndHour
        {
            get { return _endHour; }
            set { _endHour = value; }
        }

        private void Awake()
        {
            _light = GetComponent<Light>();
        }

        private void OnEnable()
        {
            LightingManager.HourPassed += OnHourPassed;
        }

        private void OnDisable()
        {
            LightingManager.HourPassed -= OnHourPassed;
        }

        private void OnHourPassed(object sender, LightingManager.HourPassedEventArgs e)
        {
            UpdateLightState(e.Hour);
        }

        private void Start()
        {
            int currentHour = LightingManager.Instance.CurrentHour;
            UpdateLightState(currentHour);
        }

        private void UpdateLightState(int hour)
        {
            bool shouldBeEnabled = IsNightTime(hour);
            if (_isLightEnabled != shouldBeEnabled)
            {
                _isLightEnabled = shouldBeEnabled;
                _light.enabled = _isLightEnabled;
            }
        }

        private bool IsNightTime(int hour)
        {
            if (_startHour < _endHour)
            {
                return hour >= _startHour && hour < _endHour;
            }
            else
            {
                return !(hour >= _endHour && hour < _startHour);
            }
        }
    }
}
