using System;
using System.Globalization;
using Microsoft.Extensions.Logging;
namespace Jellyfin.Server.ServerSetupApp;
/// 
/// Startup logger for usage with DI that utilises an underlying logger from the DI.
/// 
/// The category of the underlying logger.
#pragma warning disable SA1649 // File name should match first type name
public class StartupLogger : StartupLogger, IStartupLogger
#pragma warning restore SA1649 // File name should match first type name
{
    /// 
    /// Initializes a new instance of the  class.
    /// 
    /// The injected base logger.
    public StartupLogger(ILogger logger) : base(logger)
    {
    }
    /// 
    /// Initializes a new instance of the  class.
    /// 
    /// The underlying base logger.
    /// The group for this logger.
    internal StartupLogger(ILogger logger, StartupLogTopic? groupEntry) : base(logger, groupEntry)
    {
    }
    IStartupLogger IStartupLogger.BeginGroup(FormattableString logEntry)
    {
        var startupEntry = new StartupLogTopic()
        {
            Content = logEntry.ToString(CultureInfo.InvariantCulture),
            DateOfCreation = DateTimeOffset.Now
        };
        if (Topic is null)
        {
            SetupServer.LogQueue?.Enqueue(startupEntry);
        }
        else
        {
            Topic.Children.Add(startupEntry);
        }
        return new StartupLogger(BaseLogger, startupEntry);
    }
    IStartupLogger IStartupLogger.With(ILogger logger)
    {
        return new StartupLogger(logger, Topic);
    }
}