How to Reset Player, Sending Him back to Player Start?

A little background may help to give context to what I am wanting to do. I have a multiplayer game and I want to create a way for players to switch teams whenever they want. I currently have a rough version working by doing the following:

void AArenaPlayerController::ChangeTeam()
{
	if (Role == ROLE_Authority)
	{
		AArenaPlayerState* CharacterState = Cast<AArenaPlayerState>(PlayerState);
		if (CharacterState)
		{
			CharacterState->ChangeTeam();
			GetWorld()->GetAuthGameMode()->RestartPlayer(this);
 		}
	}
	else
	{
		ServerChangeTeam();
	}
}

What I want to happen is that upon changing teams you spawn at the enemies base with full health, almost like you died and respawned. However GetWorld()->GetAuthGameMode()->RestartPlayer(this); doesn’t accomplish this. Is there a way to basically tell the character to reset, or restart, or respawn?

Right after restarting player state, move character into new ally base with ‘Set Actor Position’ functions.

I was hoping there would be an easier way than to look at all the player starts and figure out which one works.

You can get all actors of class “PlayerStart” and from there figure out which one is the best

Kudos to @BrUnO XaVIeR @falola. I didn’t use their suggestions but in reality their suggestions are as good as mine. In order to close the thread I’ll post my solution.

I simply changed the players team number than destroyed the character. The restart logic was already built to spawn players at PlayerStart's that belonged to their team.

		if (Role == ROLE_Authority)
		{
			AMyCharacter* MyPawn = Cast<AMyCharacter>(GetPawn());
			CharacterState->ChangeTeam();
			//FinishChangeTeam(CharacterState2);
			MyPawn->Destroyed();
			MyPawn->Destroy();
			ChangeState(NAME_Inactive);
			ServerRestartPlayer();
		}
		else
		{
			ServerChangeTeam();
		}