using ANX.Framework;
using ANX.Framework.Input;
using ANX.Framework.NonXNA;

// This file is part of the ANX.Framework created by the
// "ANX.Framework developer group" and released under the Ms-PL license.
// For details see: http://anxframework.codeplex.com/license

namespace ANX.InputDevices.Test
{
	public class GamePad : IGamePad
	{
		public GamePadCapabilities GetCapabilities(PlayerIndex playerIndex)
		{
			return new GamePadCapabilities();
		}

		public GamePadState GetState(PlayerIndex playerIndex)
		{
			GamePadState gamepad;
			switch (playerIndex)
			{
				case PlayerIndex.One:
					gamepad = new GamePadState(new Vector2(100, 100), new Vector2(100, 100), 0.5f, 0.5f, Buttons.A, Buttons.B)
					{
						IsConnected = true,
						PacketNumber = 0,
					};
					break;

				case PlayerIndex.Two:
					gamepad = new GamePadState(new Vector2(200, 200), new Vector2(100, 100), 0.5f, 0.5f, Buttons.A,
						Buttons.BigButton)
					{
						IsConnected = true,
						PacketNumber = 0,
					};
					break;

				case PlayerIndex.Three:
					gamepad = new GamePadState(new Vector2(100, 100), new Vector2(100, 100), 0.5f, 0.5f, Buttons.A, Buttons.X)
					{
						IsConnected = true,
						PacketNumber = 0,
					};
					break;

				case PlayerIndex.Four:
				default:
					gamepad = new GamePadState()
					{
						IsConnected = false,
						PacketNumber = 0,
					};
					break;
			}
			return gamepad;
		}

		public GamePadState GetState(PlayerIndex playerIndex, GamePadDeadZone deadZoneMode)
		{
			return GetState(playerIndex);
		}

		public bool SetVibration(PlayerIndex playerIndex, float leftMotor, float rightMotor)
		{
			switch (playerIndex)
			{
				case PlayerIndex.One:
					return (leftMotor == 0.5f && rightMotor == 0.5f);

				case PlayerIndex.Two:
					return (leftMotor == 0.7f && rightMotor == 0.5f);

				case PlayerIndex.Three:
					return (leftMotor == -0.5f && rightMotor == 0.7f);

				case PlayerIndex.Four:
					return (leftMotor == 0.5f && rightMotor == 0.5f);
			}

			return false;
		}
	}
}