using Microsoft.Extensions.Caching.Memory;

namespace OpenHarbor.JwtTokenManager;

public class JwtTokenManagerBuilderOptions
{
  internal Action<JwtTokenManagerCacheOptions>? CacheOptions { get; set; }
  public Func<IServiceProvider, IMemoryCache>? CacheFactory { get; set; }
  public Action<JwtTokenManagerOptions>? AdditionalConfiguration { get; set; }
  
  public JwtTokenManagerBuilderOptions Cache(Func<IServiceProvider, IMemoryCache>? cacheFactory = null)
  {
    CacheFactory = cacheFactory;
    return this;
  }
  
  public JwtTokenManagerBuilderOptions Cache(
    Action<JwtTokenManagerCacheOptions> cacheOptions,
    Func<IServiceProvider, IMemoryCache>? cacheFactory = null)
  {
    CacheOptions = cacheOptions;
    return Cache(cacheFactory);
  }

  public JwtTokenManagerBuilderOptions Configuration(
    Action<JwtTokenManagerOptions> configureOptions)
  {
    AdditionalConfiguration = configureOptions;
    return this;
  }
}