using Sandbox;

namespace VeloX;
public class InputResolver
{
	public Connection Driver { get; internal set; }

	private bool IsDriverActive => Driver is not null;

	public Vector2 MouseDelta => IsDriverActive ? Input.MouseDelta : default;
	public Vector2 MouseWheel => IsDriverActive ? Input.MouseWheel : default;
	public Angles AnalogLook => IsDriverActive ? Input.AnalogLook : default;
	public Vector3 AnalogMove
	{
		get
		{
			if ( Input.UsingController )
			{
				Vector2 input = 0;
				input.x = Input.GetAnalog( InputAnalog.RightTrigger ) - Input.GetAnalog( InputAnalog.LeftTrigger );
				input.y = -Input.GetAnalog( InputAnalog.LeftStickX );
				return input;
			}
			return IsDriverActive ? Input.AnalogMove : default;
		}
	}

	public bool Down( string action )
	{
		return IsDriverActive && Input.Down( action );
	}

	public bool Pressed( string action )
	{
		return IsDriverActive && Input.Pressed( action );
	}

	public bool Released( string action )
	{
		return IsDriverActive && Input.Released( action );
	}

	public void TriggerHaptics( float leftMotor, float rightMotor, float leftTrigger = 0f, float rightTrigger = 0f, int duration = 500 )
	{
		if ( IsDriverActive )
		{
			Input.TriggerHaptics( leftMotor, rightMotor, leftTrigger, rightTrigger, duration );
		}
	}
	public void TriggerHaptics( HapticEffect effect, float lengthScale = 1, float frequencyScale = 1, float amplitudeScale = 1 )
	{
		if ( IsDriverActive )
		{
			Input.TriggerHaptics( effect, lengthScale, frequencyScale, amplitudeScale );
		}
	}

	public void StopAllHaptics()
	{
		if ( IsDriverActive )
			Input.StopAllHaptics();
	}
}
