package com.airlock.iam.oauth2.domain.model.token;

import com.airlock.iam.oauth2.api.domain.model.OAuth2Scope;
import com.airlock.iam.oauth2.domain.model.acr.OpenIdConnectAcrValue;
import com.airlock.iam.oauth2.domain.model.oidc.OidcUserAgentSessionId;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.Optional;
import java.util.Set;
import lombok.NonNull;

public record IdTokenInfo(
   @NonNull Set<OAuth2Scope> scopes,
   @NonNull Optional<String> nonce,
   @NonNull Optional<OpenIdConnectAcrValue> acr,
   @NonNull Optional<OidcUserAgentSessionId> userAgentSessionId
) {
   @SuppressFBWarnings(justification = "generated code")
   public IdTokenInfo {
      if (scopes == null) {
         throw new NullPointerException("scopes is marked non-null but is null");
      }

      if (nonce == null) {
         throw new NullPointerException("nonce is marked non-null but is null");
      }

      if (acr == null) {
         throw new NullPointerException("acr is marked non-null but is null");
      }

      if (userAgentSessionId == null) {
         throw new NullPointerException("userAgentSessionId is marked non-null but is null");
      }
   }
}
