using UnityEngine;

namespace _Scripts
{
    public class DayNightCycle : MonoBehaviour
    {
        [Header("References")]
        [SerializeField] private Light sun;
        [SerializeField] private Material skyboxMaterial;

        [Header("Cycle Settings")]
        [SerializeField] private float dayLengthInMinutes = 4f;

        private float timeOfDay = 0.5f; // 0 → 1

        private static readonly int Rotation = Shader.PropertyToID("_Rotation");
        private static readonly int Exposure = Shader.PropertyToID("_Exposure");

        void Update()
        {
            // Advance time
            timeOfDay += Time.deltaTime / (dayLengthInMinutes * 60f);
            if (timeOfDay > 1f) timeOfDay = 0f;

            UpdateSun();
            UpdateSkybox();
        }

        void UpdateSun()
        {
            float sunAngle = timeOfDay * 360f - 90f;
            sun.transform.rotation = Quaternion.Euler(sunAngle, 170f, 0);

            // Dim light at night
            float intensity = Mathf.Clamp01(Mathf.Sin(timeOfDay * Mathf.PI));
            sun.intensity = intensity * 1.2f;
        }

        void UpdateSkybox()
        {
            skyboxMaterial.SetFloat(Rotation, timeOfDay * 360f);

            float exposure = Mathf.Clamp(Mathf.Sin(timeOfDay * Mathf.PI), 0.15f, 1f);
            skyboxMaterial.SetFloat(Exposure, exposure);
        }


    }
}
