using Flaro.Data;
using Flaro.Metadata;
using Microsoft.EntityFrameworkCore;
namespace Flaro.Api;
/// Holt die Metadaten-Einstellungen aus der Datenbank.
///
///
/// Hier und nicht in Flaro.Data: sonst müsste die Datenschicht
/// den Metadaten-Anbieter kennen. So zeigen beide Richtungen auf den Kern und
/// keine aufeinander.
///
/// Je Anfrage einmal gelesen und dann gemerkt. Ohne das fragte ein Scan über
/// tausend Titel tausendmal dieselbe Zeile ab.
///
public sealed class DatabaseTmdbSettings(FlaroContext db) : ITmdbSettingsSource
{
public const string ApiKeyName = "metadata.tmdb.apiKey";
public const string LanguageName = "metadata.language";
private TmdbSettings? _gemerkt;
public async Task GetAsync(CancellationToken ct = default)
{
if (_gemerkt is not null) return _gemerkt;
var zeilen = await db.Settings
.AsNoTracking()
.Where(s => s.Key == ApiKeyName || s.Key == LanguageName)
.ToDictionaryAsync(s => s.Key, s => s.Value, ct);
return _gemerkt = TmdbSettings.Resolve(
zeilen.GetValueOrDefault(ApiKeyName),
zeilen.GetValueOrDefault(LanguageName));
}
}