using System.Security.Claims;
namespace Infrastructure.Jwt;
///
/// Service for generating and validating JSON Web Tokens (JWTs) used for authentication.
///
public interface ITokenInfrastructure
{
///
/// Generates a signed JWT for the given user.
///
/// The unique identifier of the user the token is issued for.
/// The username of the user, included as a claim.
/// The date and time at which the token expires.
/// The symmetric secret used to sign the token.
/// The serialized, signed JWT string.
string GenerateJwt(Guid userId, string username, DateTime expiry, string secret);
///
/// Validates a JWT and returns the resulting claims principal.
///
/// The JWT string to validate.
/// The symmetric secret used to verify the token's signature.
/// A representing the validated token's claims.
///
/// Thrown when the token is invalid, expired, or fails
/// validation.
///
Task ValidateJwtAsync(string token, string secret);
}