using Serilog.Core;
using Serilog.Events;

namespace Elecciones.Infrastructure.Services;

public class LoggingSwitchService
{
    // El interruptor de nivel de logging de Serilog.
    // Lo inicializamos en 'Information' por defecto.
    public LoggingLevelSwitch LevelSwitch { get; } = new(LogEventLevel.Information);

    /// <summary>
    /// Cambia el nivel mínimo de logging dinámicamente.
    /// </summary>
    /// <param name="level">El nuevo nivel de logging como string (ej. "Information", "Warning", "Verbose").</param>
    /// <returns>True si el nivel se cambió con éxito, false si el string no es válido.</returns>
    public bool SetLoggingLevel(string level)
    {
        // Usamos Enum.TryParse para convertir el string a un valor del enum LogEventLevel.
        // El 'true' ignora mayúsculas/minúsculas.
        if (Enum.TryParse<LogEventLevel>(level, true, out var newLevel))
        {
            // Si la conversión es exitosa, actualizamos el interruptor.
            LevelSwitch.MinimumLevel = newLevel;
            return true;
        }
        
        // Si el string no corresponde a ningún nivel válido, no hacemos nada y devolvemos false.
        return false;
    }
}