using System;
namespace axXez.TS3.Protocol
{
/// Represents a virtual server entry returned by serverlist.
public class VirtualServerInfo : TsEntity, IVirtualServer
{
/// Virtual server ID.
[TsField("virtualserver_id")]
public int ID { get; protected set; }
/// UDP port the virtual server listens on for voice connections.
[TsField("virtualserver_port")]
public int Port { get; protected set; }
/// Current status of the virtual server (e.g. "online", "offline").
[TsField("virtualserver_status")]
public string Status { get; protected set; }
/// Number of regular voice clients currently connected.
[TsField("virtualserver_clientsonline")]
public int ClientsOnline { get; protected set; }
/// Number of query clients currently connected.
[TsField("virtualserver_queryclientsonline")]
public int QueryClientsOnline { get; protected set; }
/// Maximum number of clients allowed on the server simultaneously.
[TsField("virtualserver_maxclients")]
public int MaxClients { get; protected set; }
/// Time the virtual server has been running since last start, in seconds.
[TsField("virtualserver_uptime")]
public int UptimeSeconds { get; protected set; }
/// Time the virtual server has been running since last start.
public TimeSpan Uptime => TimeSpan.FromSeconds(UptimeSeconds);
/// Display name of the virtual server.
[TsField("virtualserver_name")]
public string Name { get; protected set; }
/// Whether the server starts automatically when the server process starts.
[TsField("virtualserver_autostart")]
public bool Autostart { get; protected set; }
/// Machine ID used to identify the physical host when multiple servers share an instance.
[TsField("virtualserver_machine_id")]
public string MachineID { get; protected set; }
/// Unique identifier of the virtual server.
[TsField("virtualserver_unique_identifier")]
public string UID { get; protected set; }
internal VirtualServerInfo(TsDataEntry data) : base(data) { }
///
public override string ToString() => $"VirtualServer[{ID}] {Name}";
///
public override int GetHashCode() => ID.GetHashCode();
///
public override bool Equals(object obj) => obj is VirtualServerInfo && ID.Equals((obj as VirtualServerInfo).ID);
}
}