using Microsoft.Extensions.Options;
using TeleWave.Application.Common.Interfaces;
namespace TeleWave.Infrastructure.Metadata;
/// Резолвит провайдеры по ключу; доступными считает только те, у кого задан API-ключ.
public sealed class MetadataProviderResolver : IMetadataProviderResolver
{
private readonly Dictionary _byKey;
private readonly List _available = [];
public MetadataProviderResolver(
IEnumerable providers,
IOptions options
)
{
_byKey = providers.ToDictionary(p => p.Key, StringComparer.OrdinalIgnoreCase);
var opt = options.Value;
if (_byKey.ContainsKey("tmdb") && !string.IsNullOrWhiteSpace(opt.Tmdb.ApiKey))
_available.Add("tmdb");
if (_byKey.ContainsKey("omdb") && !string.IsNullOrWhiteSpace(opt.Omdb.ApiKey))
_available.Add("omdb");
}
public IMetadataProvider? Resolve(string key) =>
_available.Contains(key, StringComparer.OrdinalIgnoreCase)
&& _byKey.TryGetValue(key, out var provider)
? provider
: null;
public IReadOnlyList AvailableKeys => _available;
}