using System;
using System.Linq;
using UnityEngine;
using UnityEngine.InputSystem;

namespace Gyvr.Mythril2D
{
    [Serializable]
    public class RiderController : PlayerController
    {
        public bool isRiding { get; private set; }

        protected override void OnStart()
        {
            base.OnStart();
            GameManager.InputSystem.gameplay.dismount.performed += OnDismount;
        }

        protected override void OnStop()
        {
            base.OnStop();
            GameManager.InputSystem.gameplay.dismount.performed -= OnDismount;
        }

        public void OnDismount(InputAction.CallbackContext context)
        {
            if (!context.performed) return;

            Mount currentMount = UnityEngine.Object.FindObjectsByType<Mount>(FindObjectsSortMode.None).FirstOrDefault(m => m.IsMounted && m.rider == GameManager.Player);

            if (currentMount != null)
            {
                currentMount.DismountPlayer();
            }
        }

        public void SetIsRiding(bool value)
        {
            isRiding = value;

            if (m_subject.animationStrategy is MountPolydirectionalAnimationStrategy riderAnim)
            {
                riderAnim.SetMountedState(value);
            }
        }
    }
}
