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

import com.airlock.iam.oauth2.api.domain.model.OAuth2ClientId;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.Optional;
import java.util.Set;
import lombok.NonNull;

public final class OAuth2ClientAuthenticationData {
   @NonNull
   private final OAuth2ClientId clientId;
   @NonNull
   private final Optional<String> clientSecret;
   @NonNull
   private final Set<OAuth2ClientCertificate> certificates;

   @SuppressFBWarnings(justification = "generated code")
   public OAuth2ClientAuthenticationData(
      @NonNull OAuth2ClientId clientId, @NonNull Optional<String> clientSecret, @NonNull Set<OAuth2ClientCertificate> certificates
   ) {
      if (clientId == null) {
         throw new NullPointerException("clientId is marked non-null but is null");
      }

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

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

      this.clientId = clientId;
      this.clientSecret = clientSecret;
      this.certificates = certificates;
   }

   @NonNull
   @SuppressFBWarnings(justification = "generated code")
   public OAuth2ClientId clientId() {
      return this.clientId;
   }

   @NonNull
   @SuppressFBWarnings(justification = "generated code")
   public Optional<String> clientSecret() {
      return this.clientSecret;
   }

   @NonNull
   @SuppressFBWarnings(justification = "generated code")
   public Set<OAuth2ClientCertificate> certificates() {
      return this.certificates;
   }
}
