using Microsoft.EntityFrameworkCore;
using TeleWave.Application.Common.Interfaces;

namespace TeleWave.Application.Settings;

/// <summary>Чтение типизированных значений из key-value настроек с дефолтом при отсутствии ключа.</summary>
public static class AppSettingsReader
{
    public static async Task<bool> GetBoolSettingAsync(
        this IAppDbContext db,
        string key,
        bool defaultValue,
        CancellationToken cancellationToken
    )
    {
        var value = await db
            .AppSettings.AsNoTracking()
            .Where(s => s.Key == key)
            .Select(s => s.Value)
            .FirstOrDefaultAsync(cancellationToken);

        return value is not null && bool.TryParse(value, out var parsed) ? parsed : defaultValue;
    }

    public static async Task<string> GetStringSettingAsync(
        this IAppDbContext db,
        string key,
        string defaultValue,
        CancellationToken cancellationToken
    )
    {
        var value = await db
            .AppSettings.AsNoTracking()
            .Where(s => s.Key == key)
            .Select(s => s.Value)
            .FirstOrDefaultAsync(cancellationToken);

        return value ?? defaultValue;
    }
}
