using Mirror;
using QSB.Messaging;
using QSB.WorldSync;

namespace QSB.AuthoritySync;

/// <summary>
/// always sent to host
/// </summary>
public class AuthQueueMessage : QSBMessage<(uint NetId, AuthQueueAction Action)>
{
	public AuthQueueMessage(uint netId, AuthQueueAction action) : base((netId, action)) =>
		To = 0;

	public override bool ShouldReceive => QSBWorldSync.AllObjectsReady;
	public override void OnReceiveLocal() => OnReceiveRemote();
	public override void OnReceiveRemote() => NetworkServer.spawned[Data.NetId].ServerUpdateAuthQueue(From, Data.Action);
}

public enum AuthQueueAction
{
	/// <summary>
	/// add player to the queue
	/// </summary>
	Add,
	/// <summary>
	/// remove player from the queue
	/// </summary>
	Remove,
	/// <summary>
	/// add player to the queue and force them to the front
	/// </summary>
	Force
}