using System.Threading.Tasks;
using Content.Shared.CCVar;
using Robust.Shared.Configuration;
namespace Content.Server.Database;
///
/// Stupid tiny manager whose sole purpose is keeping track of the database entry for this server.
///
///
/// This allows the value to be cached,
/// so it can be easily retrieved by later code that needs to log the server ID to the database.
///
public sealed class ServerDbEntryManager
{
[Dependency] private readonly IConfigurationManager _cfg = default!;
[Dependency] private readonly IServerDbManager _db = default!;
[Dependency] private readonly ILogManager _logManager = default!;
private Task? _serverEntityTask;
///
/// The entity that represents this server in the database.
///
///
/// This value is cached when first requested. Do not re-use this entity; if you need data like the rounds,
/// request it manually with .
///
public Task ServerEntity => _serverEntityTask ??= GetServerEntity();
private async Task GetServerEntity()
{
var name = _cfg.GetCVar(CCVars.AdminLogsServerName);
var server = await _db.AddOrGetServer(name);
_logManager.GetSawmill("db").Verbose("Server name: {Name}, ID in database: {Id}", server, server.Id);
return server;
}
}