using System;
using System.Text;

namespace AS400API.Configuration;

public sealed class JwtOptions
{
    public const string SectionName = "Jwt";

    public string Issuer { get; set; } = "AS400API";
    public string Audience { get; set; } = "AS400API.Clients";
    public string Key { get; set; } = "change-me-to-a-long-random-secret";
    public int AccessTokenLifetimeMinutes { get; set; } = 60;

    public void EnsureIsValid()
    {
        if (string.IsNullOrWhiteSpace(Key) || Encoding.UTF8.GetByteCount(Key) < 32)
        {
            throw new InvalidOperationException("Jwt:Key must be at least 32 UTF-8 bytes. Set a strong secret in configuration");
        }

        if (AccessTokenLifetimeMinutes <= 0)
        {
            throw new InvalidOperationException("Jwt:AccessTokenLifetimeMinutes must be a positive integer");
        }
    }
}
