My current code looks like this:
GameManager.cs:
using UnityEngine;

public class GameManager : MonoBehaviour
{
    public StateController _characterController;
    public UIStateController _uiStateController;

    void Update()
    {
        if(_uiStateController.IsActive()) {
            _uiStateController.HandleInput();
        } else {
            _characterController.HandleInput();
        }
    }
}

StateController.cs:
using UnityEngine;

public class StateController : MonoBehaviour
{
    public PlayerState _currentState;
    public PlayerIdleState _idleState;
    public PlayerMoveState _moveState;
    private PlayerInput _playerInput;

    private void Awake()
    {
        _playerInput = GetComponent<PlayerInput>();
    }

    private void Start()
    {
        _currentState = _idleState;
        _currentState.EnterState(this);
    }

    private void Update()
    {
        _currentState.UpdateState(this);
    }

    public void TransitionToState(PlayerState newState) 
    {
        _currentState.ExitState(this);
        _currentState = newState;
        _currentState.EnterState(this);
    }

    public void HandleInput()
    {
        if (_playerInput._moveInput != Vector2.zero)
        {
            TransitionToState(_moveState);
        }
        else
        {
            TransitionToState(_idleState);
        }
    }

}

PlayerInput.cs:
using UnityEngine;
using UnityEngine.InputSystem;

public class PlayerInput : MonoBehaviour
{
    public Vector2 _moveInput;
    bool _runInput;
    bool _interactInput;

    private PlayerInputActions _inputActions;

    private void Awake()
    {
        _inputActions = new PlayerInputActions();
    }

    private void OnEnable()
    {
        _inputActions.PlayerControls.Enable();
    }

    private void OnDisable()
    {
        _inputActions.PlayerControls.Disable();
    }

    private void Start()
    {
        _inputActions.PlayerControls.Move.started += onMovementInput;
        _inputActions.PlayerControls.Move.performed += onMovementInput;
        _inputActions.PlayerControls.Move.canceled += onMovementInput;
        _inputActions.PlayerControls.Run.performed += onRun;
        _inputActions.PlayerControls.Run.canceled += onRun;  
        _inputActions.PlayerControls.Interact.performed += onInteract;
        _inputActions.PlayerControls.Interact.canceled += onInteract;      
    }

    void onMovementInput(InputAction.CallbackContext context)
    {
        _moveInput = context.ReadValue<Vector2>();
    }

    private void onRun(InputAction.CallbackContext context)
    {
        _runInput = context.ReadValueAsButton();
    }

    private void onInteract(InputAction.CallbackContext context)
    {
        _interactInput = context.ReadValueAsButton();
    }
}

and as an exmaple PlayerMoveState.cs:
using UnityEngine;

[CreateAssetMenu(menuName = "State Machine/States/Move")]
public class PlayerMoveState : PlayerState
{
    float _moveSpeed = 3.0f;
    private CharacterController _characterController;

    public override void EnterState(StateController controller)
    {
        _characterController = controller.GetComponent<CharacterController>();
    }

    public override void UpdateState(StateController controller)
    {
        // Get input from the PlayerInput component
        Vector2 moveInput = controller.GetComponent<PlayerInput>()._moveInput;

        // Calculate movement direction and speed
        Vector3 moveDirection = new Vector3(moveInput.x, 0f, moveInput.y);
        moveDirection = controller.transform.TransformDirection(moveDirection);
        moveDirection *= _moveSpeed;

        // Move the character using the CharacterController component
        _characterController.Move(moveDirection * Time.deltaTime);
    }

    public override void ExitState(StateController controller)
    {

    }

    public override void SwitchState(StateController controller)
    {
        
    }
}
I now have assigned a Run button to shift (which I want to hold to run) and a interact button on "E" (which shoudl get pressed to interact with other gameobjects I add later on. How would I now go on to create states for these two thinsg given my current code?