using Content.Server.Voting.Managers;
using Robust.Shared.Player;
namespace Content.Server.Voting
{
///
/// Options for creating a vote.
///
public sealed class VoteOptions
{
///
/// The text that is shown for "who called the vote".
///
public string InitiatorText { get; set; } = "";
///
/// The player that started the vote. Used to keep track of player cooldowns to avoid vote spam.
///
public ICommonSession? InitiatorPlayer { get; set; }
///
/// The shown title of the vote.
///
public string Title { get; set; } = "";
///
/// How long the vote lasts.
///
public TimeSpan Duration { get; set; } = TimeSpan.FromMinutes(1);
///
/// How long the initiator should be timed out from calling votes. Defaults to duration * 2;
///
public TimeSpan? InitiatorTimeout { get; set; }
///
/// The options of the vote. Each entry is a tuple of the player-shown text,
/// and a data object that can be used to keep track of options later.
///
public List<(string text, object data)> Options { get; set; } = new();
///
/// Which sessions may send a vote. Used when only a subset of players should be able to vote. Defaults to all.
///
public VoteManager.VoterEligibility VoterEligibility = VoteManager.VoterEligibility.All;
///
/// Whether the vote should send and display the number of votes to the clients. Being an admin defaults this option to true for your client.
///
public bool DisplayVotes = true;
///
/// Whether the vote should have an entity attached to it, to be used for things like letting ghosts follow it.
///
public NetEntity? TargetEntity = null;
///
/// Sets and
/// by setting the latter to the player's name.
///
public void SetInitiator(ICommonSession player)
{
InitiatorPlayer = player;
InitiatorText = player.Name;
}
public void SetInitiatorOrServer(ICommonSession? player)
{
if (player != null)
{
SetInitiator(player);
}
else
{
InitiatorText = Loc.GetString("vote-options-server-initiator-text");
}
}
}
}