using Gyvr.Mythril2D;
using System;
using System.Linq;
using System.Reflection;
using UnityEngine;
using UnityEngine.InputSystem;

namespace Gyvr.Mythril2D
{
    static class MovableReflection
    {
        private static readonly FieldInfo animationStrategyField =
            typeof(Movable).GetField("m_animationStrategy", BindingFlags.Instance | BindingFlags.NonPublic);

        public static IAnimationStrategy GetAnimationStrategy(Movable movable)
        {
            return animationStrategyField?.GetValue(movable) as IAnimationStrategy;
        }
    }

    [Serializable]
    public class RiderController : PlayerController
    {
        public bool isRiding { get; private set; }
        [HideInInspector] public Mount currentMount;
        [HideInInspector] public Mount lastMount;

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

            var anim = MovableReflection.GetAnimationStrategy(m_subject);
            if (anim is MountPolydirectionalAnimationStrategy riderAnim)
            {
                riderAnim.SetMountedState(value);
            }
        }

        public void SetMount(Mount mount)
        {
            currentMount = mount;
        }

        public void ClearMount()
        {
            lastMount = currentMount;
            currentMount = null;
        }
    }
}
