using UnityEngine;
using EventsAppQuest.Core;

namespace EventsAppQuest.Presentation
{
    /// <summary>
    /// Rig de câmera compatível com XR real para a apresentação Quest.
    /// Em EditorFallback e SimulatedXR aplica altura/offset da câmera; em RealXR deixa o subsistema XR controlar a câmera (futuro).
    /// Use em vez de ou em conjunto com QuestPresentationCameraRig quando quiser modo de runtime explícito.
    /// </summary>
    public class QuestXRPresentationRig : MonoBehaviour
    {
        [Tooltip("Altura dos olhos em metros (usado em fallback/simulado).")]
        [SerializeField] private float _eyeHeight = 1.6f;

        [Tooltip("Offset frontal (eixo local Z) da câmera (fallback/simulado).")]
        [SerializeField] private float _eyeForward = 0f;

        [Tooltip("Se null, usa QuestXRRuntimeBootstrap.CachedStatus.")]
        [SerializeField] private QuestPresentationRuntimeMode _overrideMode;

        [Tooltip("Se true, usa _overrideMode em vez do serviço.")]
        [SerializeField] private bool _useOverrideMode;

        private void Start()
        {
            ApplyRigFromRuntimeMode();
        }

        /// <summary>Obtém o modo de runtime actual (override ou cache do bootstrap).</summary>
        public QuestPresentationRuntimeMode GetRuntimeMode()
        {
            if (_useOverrideMode)
                return _overrideMode;
            var status = QuestXRRuntimeBootstrap.CachedStatus;
            return status?.RuntimeMode ?? QuestPresentationRuntimeMode.EditorFallback;
        }

        private void ApplyRigFromRuntimeMode()
        {
            var mode = GetRuntimeMode();
            var cam = GetComponentInChildren<Camera>(true);
            if (cam == null) return;

            switch (mode)
            {
                case QuestPresentationRuntimeMode.RealXR:
                    // XR real: não alterar posição; o subsistema XR controla a câmera (quando integrado).
                    break;
                case QuestPresentationRuntimeMode.EditorFallback:
                case QuestPresentationRuntimeMode.SimulatedXR:
                default:
                    cam.transform.localPosition = new Vector3(0f, _eyeHeight, _eyeForward);
                    cam.transform.localRotation = Quaternion.identity;
                    break;
            }
        }
    }
}
