using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
using UnityEngine.UI;

public class SecretPlanetWeight : MonoBehaviour
{
    [SerializeField] private TextMeshProUGUI _resultText;
    [SerializeField] private Button _checkButton;
    [SerializeField] private Rigidbody _astronautRb;

    private const float _earthGravity = 9.81f;
    float[] _gravities = { 274f, 3.7f, 8.87f, 1.62f, 3.71f, 24.79f, 10.44f, 8.69f, 11.15f, 9.81f };

    void OnEnable()
    {
        RebuildDropdowns();
    }

    void RebuildDropdowns()
    {
        float mass = _astronautRb != null ? _astronautRb.mass : 75f;
        SecretDropdown[] secretDropdowns = FindObjectsOfType<SecretDropdown>(true);
        foreach (var sd in secretDropdowns)
        {
            sd.Dropdown.ClearOptions();
            sd.Dropdown.options.Add(new TMP_Dropdown.OptionData("Обрати"));
            foreach (var g in _gravities)
            {
                float weightN = mass * g;
                float massKg = weightN / _earthGravity;
                sd.Dropdown.options.Add(new TMP_Dropdown.OptionData(Mathf.RoundToInt(massKg) + " кг"));
            }
            sd.Dropdown.value = 0;
            sd.Dropdown.RefreshShownValue();
        }
        _checkButton.onClick.RemoveAllListeners();
        _checkButton.onClick.AddListener(CheckAll);
        _resultText.alpha = 0f;
    }

    void CheckAll()
    {
        float mass = _astronautRb != null ? _astronautRb.mass : 75f;
        int correct = 0;
        SecretDropdown[] secretDropdowns = FindObjectsOfType<SecretDropdown>(true);
        foreach (var sd in secretDropdowns)
        {
            int planetIndex = sd.PlanetIndex;
            float correctWeightN = mass * _gravities[planetIndex];
            float correctMassKg = correctWeightN / _earthGravity;
            int selectedIndex = sd.Dropdown.value - 1;
            if (selectedIndex < 0) continue;
            float selectedWeightN = mass * _gravities[selectedIndex];
            float selectedMassKg = selectedWeightN / _earthGravity;
            if (Mathf.Abs(selectedMassKg - correctMassKg) < 1f)
            {
                correct++;
                sd.Dropdown.GetComponentInParent<Image>().color = Color.green;
            }
            else
            {
                sd.Dropdown.GetComponentInParent<Image>().color = Color.red;
            }
        }
        if (correct == secretDropdowns.Length)
        {
            _resultText.text = "Блискуче! Це правильна відповідь!";
            _resultText.color = Color.green;
        }
        else
        {
            _resultText.text = "Майже! Спробуй ще раз";
            _resultText.color = Color.red;
        }
        StartCoroutine(ShowText());
    }

    IEnumerator ShowText()
    {
        float t = 0f;
        while (t < 1f) { t += Time.deltaTime * 2f; _resultText.alpha = t; yield return null; }
        yield return new WaitForSeconds(3f);
        t = 1f;
        while (t > 0f) { t -= Time.deltaTime * 2f; _resultText.alpha = t; yield return null; }
    }
}
