using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.XR;
using static UnityEngine.GraphicsBuffer;

public class WeaponSelectMenu : MonoBehaviour
{
    public Transform headTransform;
    public Transform imageTransform;

    private Vector3 originalScale;
    private Coroutine currentTransition;

    private Hand activeHand;

    private void Awake()
    {
        originalScale = transform.localScale;
    }

    private void Start()
    {
        Hide();
    }

    public void Update()
    {
        transform.rotation = Quaternion.LookRotation(transform.position - headTransform.position);

        if (activeHand != null)
        {
            Vector3 relative = transform.InverseTransformPoint(activeHand.transform.position);
            float angle = Mathf.Atan2(relative.x, relative.z) * Mathf.Rad2Deg;
            imageTransform.localRotation = Quaternion.Euler(0f, 0f, angle);
        }
    }

    public void Show(Hand hand)
    {
        activeHand = hand;

        transform.position = hand.transform.position;

        foreach (Transform t in transform)
        {
            t.gameObject.SetActive(true);
        }

        CancelCurrentTransition();
        currentTransition = StartCoroutine(Co_ScaleTransition(false, 0.3f));
    }

    public void Hide()
    {
        activeHand = null;

        CancelCurrentTransition();
        currentTransition = StartCoroutine(Co_ScaleTransition(true, 0.3f));
    }

    public void CancelCurrentTransition()
    {
        if (currentTransition != null)
            StopCoroutine(currentTransition);
    }

    private IEnumerator Co_ScaleTransition(bool hide, float duration)
    {
        float timeElapsed = 0;
        do
        {
            timeElapsed += Time.deltaTime;
            float normalizedTime = timeElapsed / duration;

            if (hide)
            {
                transform.localScale = Vector3.Lerp(transform.localScale, Vector3.zero, Easing.Cubic.In(normalizedTime));
            }
            else
            {
                transform.localScale = Vector3.Lerp(transform.localScale, originalScale, Easing.Cubic.Out(normalizedTime));
            }

            yield return null;
        }
        while (timeElapsed < duration);

        foreach (Transform t in transform)
        {
            t.gameObject.SetActive(!hide);
        }
    }
}