package com.airlock.iam.techclientreg.infrastructure.transfer.request;

import com.airlock.iam.techclientreg.infrastructure.transfer.response.JwkSetData;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonProperty;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import io.swagger.v3.oas.annotations.media.Schema;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Schema(ref = "#/components/schemas/OAuth2ClientRegistrationRequestDataOverride")
public final class OAuth2ClientRegistrationRequestData {
   @JsonProperty("software_statement")
   private String softwareStatement;
   private List<String> redirectUris;
   @JsonProperty("token_endpoint_auth_method")
   private String tokenEndpointAuthMethod;
   @JsonProperty("grant_types")
   private List<String> grantTypes;
   @JsonProperty("response_types")
   private List<String> responseTypes;
   @JsonProperty("client_name")
   private String clientName;
   @JsonProperty("client_uri")
   private String clientUri;
   @JsonProperty("logo_uri")
   private String logoUri;
   private String scope;
   private List<String> contacts;
   @JsonProperty("tos_uri")
   private String tosUri;
   @JsonProperty("policy_uri")
   private String policyUri;
   @JsonProperty("jwks_uri")
   private String jwksUri;
   @Schema(
      description = "Client's JSON Web Key Set <a href=\"https://tools.ietf.org/html/rfc7517\">RFC 7517</a> document value, which contains the client's public keys. Must be a JSON object containing a valid JWK Set."
   )
   private JwkSetData jwks;
   @JsonProperty("software_id")
   @Schema(
      description = "Unique identifier assigned by the client developer or software publisher. Used by registration endpoints to identify the client software to be dynamically registered."
   )
   private String softwareId;
   @JsonProperty("software_version")
   private String softwareVersion;
   @JsonAnySetter
   private Map<String, Object> customProperties = new HashMap<>();

   @SuppressFBWarnings(justification = "generated code")
   public String getSoftwareStatement() {
      return this.softwareStatement;
   }

   @SuppressFBWarnings(justification = "generated code")
   public List<String> getRedirectUris() {
      return this.redirectUris;
   }

   @SuppressFBWarnings(justification = "generated code")
   public String getTokenEndpointAuthMethod() {
      return this.tokenEndpointAuthMethod;
   }

   @SuppressFBWarnings(justification = "generated code")
   public List<String> getGrantTypes() {
      return this.grantTypes;
   }

   @SuppressFBWarnings(justification = "generated code")
   public List<String> getResponseTypes() {
      return this.responseTypes;
   }

   @SuppressFBWarnings(justification = "generated code")
   public String getClientName() {
      return this.clientName;
   }

   @SuppressFBWarnings(justification = "generated code")
   public String getClientUri() {
      return this.clientUri;
   }

   @SuppressFBWarnings(justification = "generated code")
   public String getLogoUri() {
      return this.logoUri;
   }

   @SuppressFBWarnings(justification = "generated code")
   public String getScope() {
      return this.scope;
   }

   @SuppressFBWarnings(justification = "generated code")
   public List<String> getContacts() {
      return this.contacts;
   }

   @SuppressFBWarnings(justification = "generated code")
   public String getTosUri() {
      return this.tosUri;
   }

   @SuppressFBWarnings(justification = "generated code")
   public String getPolicyUri() {
      return this.policyUri;
   }

   @SuppressFBWarnings(justification = "generated code")
   public String getJwksUri() {
      return this.jwksUri;
   }

   @SuppressFBWarnings(justification = "generated code")
   public JwkSetData getJwks() {
      return this.jwks;
   }

   @SuppressFBWarnings(justification = "generated code")
   public String getSoftwareId() {
      return this.softwareId;
   }

   @SuppressFBWarnings(justification = "generated code")
   public String getSoftwareVersion() {
      return this.softwareVersion;
   }

   @SuppressFBWarnings(justification = "generated code")
   public Map<String, Object> getCustomProperties() {
      return this.customProperties;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setSoftwareStatement(String softwareStatement) {
      this.softwareStatement = softwareStatement;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setRedirectUris(List<String> redirectUris) {
      this.redirectUris = redirectUris;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setTokenEndpointAuthMethod(String tokenEndpointAuthMethod) {
      this.tokenEndpointAuthMethod = tokenEndpointAuthMethod;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setGrantTypes(List<String> grantTypes) {
      this.grantTypes = grantTypes;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setResponseTypes(List<String> responseTypes) {
      this.responseTypes = responseTypes;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setClientName(String clientName) {
      this.clientName = clientName;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setClientUri(String clientUri) {
      this.clientUri = clientUri;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setLogoUri(String logoUri) {
      this.logoUri = logoUri;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setScope(String scope) {
      this.scope = scope;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setContacts(List<String> contacts) {
      this.contacts = contacts;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setTosUri(String tosUri) {
      this.tosUri = tosUri;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setPolicyUri(String policyUri) {
      this.policyUri = policyUri;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setJwksUri(String jwksUri) {
      this.jwksUri = jwksUri;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setJwks(JwkSetData jwks) {
      this.jwks = jwks;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setSoftwareId(String softwareId) {
      this.softwareId = softwareId;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setSoftwareVersion(String softwareVersion) {
      this.softwareVersion = softwareVersion;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setCustomProperties(Map<String, Object> customProperties) {
      this.customProperties = customProperties;
   }

   @SuppressFBWarnings(justification = "generated code")
   @Override
   public boolean equals(Object o) {
      if (o == this) {
         return true;
      } else if (!(o instanceof OAuth2ClientRegistrationRequestData other)) {
         return false;
      } else {
         Object this$softwareStatement = this.softwareStatement;
         Object other$softwareStatement = other.softwareStatement;
         if (this$softwareStatement == null ? other$softwareStatement == null : this$softwareStatement.equals(other$softwareStatement)) {
            Object this$redirectUris = this.redirectUris;
            Object other$redirectUris = other.redirectUris;
            if (this$redirectUris == null ? other$redirectUris == null : this$redirectUris.equals(other$redirectUris)) {
               Object this$tokenEndpointAuthMethod = this.tokenEndpointAuthMethod;
               Object other$tokenEndpointAuthMethod = other.tokenEndpointAuthMethod;
               if (this$tokenEndpointAuthMethod == null
                  ? other$tokenEndpointAuthMethod == null
                  : this$tokenEndpointAuthMethod.equals(other$tokenEndpointAuthMethod)) {
                  Object this$grantTypes = this.grantTypes;
                  Object other$grantTypes = other.grantTypes;
                  if (this$grantTypes == null ? other$grantTypes == null : this$grantTypes.equals(other$grantTypes)) {
                     Object this$responseTypes = this.responseTypes;
                     Object other$responseTypes = other.responseTypes;
                     if (this$responseTypes == null ? other$responseTypes == null : this$responseTypes.equals(other$responseTypes)) {
                        Object this$clientName = this.clientName;
                        Object other$clientName = other.clientName;
                        if (this$clientName == null ? other$clientName == null : this$clientName.equals(other$clientName)) {
                           Object this$clientUri = this.clientUri;
                           Object other$clientUri = other.clientUri;
                           if (this$clientUri == null ? other$clientUri == null : this$clientUri.equals(other$clientUri)) {
                              Object this$logoUri = this.logoUri;
                              Object other$logoUri = other.logoUri;
                              if (this$logoUri == null ? other$logoUri == null : this$logoUri.equals(other$logoUri)) {
                                 Object this$scope = this.scope;
                                 Object other$scope = other.scope;
                                 if (this$scope == null ? other$scope == null : this$scope.equals(other$scope)) {
                                    Object this$contacts = this.contacts;
                                    Object other$contacts = other.contacts;
                                    if (this$contacts == null ? other$contacts == null : this$contacts.equals(other$contacts)) {
                                       Object this$tosUri = this.tosUri;
                                       Object other$tosUri = other.tosUri;
                                       if (this$tosUri == null ? other$tosUri == null : this$tosUri.equals(other$tosUri)) {
                                          Object this$policyUri = this.policyUri;
                                          Object other$policyUri = other.policyUri;
                                          if (this$policyUri == null ? other$policyUri == null : this$policyUri.equals(other$policyUri)) {
                                             Object this$jwksUri = this.jwksUri;
                                             Object other$jwksUri = other.jwksUri;
                                             if (this$jwksUri == null ? other$jwksUri == null : this$jwksUri.equals(other$jwksUri)) {
                                                Object this$jwks = this.jwks;
                                                Object other$jwks = other.jwks;
                                                if (this$jwks == null ? other$jwks == null : this$jwks.equals(other$jwks)) {
                                                   Object this$softwareId = this.softwareId;
                                                   Object other$softwareId = other.softwareId;
                                                   if (this$softwareId == null ? other$softwareId == null : this$softwareId.equals(other$softwareId)) {
                                                      Object this$softwareVersion = this.softwareVersion;
                                                      Object other$softwareVersion = other.softwareVersion;
                                                      if (this$softwareVersion == null
                                                         ? other$softwareVersion == null
                                                         : this$softwareVersion.equals(other$softwareVersion)) {
                                                         Object this$customProperties = this.customProperties;
                                                         Object other$customProperties = other.customProperties;
                                                         return this$customProperties == null
                                                            ? other$customProperties == null
                                                            : this$customProperties.equals(other$customProperties);
                                                      } else {
                                                         return false;
                                                      }
                                                   } else {
                                                      return false;
                                                   }
                                                } else {
                                                   return false;
                                                }
                                             } else {
                                                return false;
                                             }
                                          } else {
                                             return false;
                                          }
                                       } else {
                                          return false;
                                       }
                                    } else {
                                       return false;
                                    }
                                 } else {
                                    return false;
                                 }
                              } else {
                                 return false;
                              }
                           } else {
                              return false;
                           }
                        } else {
                           return false;
                        }
                     } else {
                        return false;
                     }
                  } else {
                     return false;
                  }
               } else {
                  return false;
               }
            } else {
               return false;
            }
         } else {
            return false;
         }
      }
   }

   @SuppressFBWarnings(justification = "generated code")
   @Override
   public int hashCode() {
      int PRIME = 59;
      int result = 1;
      Object $softwareStatement = this.softwareStatement;
      result = result * 59 + ($softwareStatement == null ? 43 : $softwareStatement.hashCode());
      Object $redirectUris = this.redirectUris;
      result = result * 59 + ($redirectUris == null ? 43 : $redirectUris.hashCode());
      Object $tokenEndpointAuthMethod = this.tokenEndpointAuthMethod;
      result = result * 59 + ($tokenEndpointAuthMethod == null ? 43 : $tokenEndpointAuthMethod.hashCode());
      Object $grantTypes = this.grantTypes;
      result = result * 59 + ($grantTypes == null ? 43 : $grantTypes.hashCode());
      Object $responseTypes = this.responseTypes;
      result = result * 59 + ($responseTypes == null ? 43 : $responseTypes.hashCode());
      Object $clientName = this.clientName;
      result = result * 59 + ($clientName == null ? 43 : $clientName.hashCode());
      Object $clientUri = this.clientUri;
      result = result * 59 + ($clientUri == null ? 43 : $clientUri.hashCode());
      Object $logoUri = this.logoUri;
      result = result * 59 + ($logoUri == null ? 43 : $logoUri.hashCode());
      Object $scope = this.scope;
      result = result * 59 + ($scope == null ? 43 : $scope.hashCode());
      Object $contacts = this.contacts;
      result = result * 59 + ($contacts == null ? 43 : $contacts.hashCode());
      Object $tosUri = this.tosUri;
      result = result * 59 + ($tosUri == null ? 43 : $tosUri.hashCode());
      Object $policyUri = this.policyUri;
      result = result * 59 + ($policyUri == null ? 43 : $policyUri.hashCode());
      Object $jwksUri = this.jwksUri;
      result = result * 59 + ($jwksUri == null ? 43 : $jwksUri.hashCode());
      Object $jwks = this.jwks;
      result = result * 59 + ($jwks == null ? 43 : $jwks.hashCode());
      Object $softwareId = this.softwareId;
      result = result * 59 + ($softwareId == null ? 43 : $softwareId.hashCode());
      Object $softwareVersion = this.softwareVersion;
      result = result * 59 + ($softwareVersion == null ? 43 : $softwareVersion.hashCode());
      Object $customProperties = this.customProperties;
      return result * 59 + ($customProperties == null ? 43 : $customProperties.hashCode());
   }

   @SuppressFBWarnings(justification = "generated code")
   @Override
   public String toString() {
      return "OAuth2ClientRegistrationRequestData(softwareStatement="
         + this.getSoftwareStatement()
         + ", redirectUris="
         + this.getRedirectUris()
         + ", tokenEndpointAuthMethod="
         + this.getTokenEndpointAuthMethod()
         + ", grantTypes="
         + this.getGrantTypes()
         + ", responseTypes="
         + this.getResponseTypes()
         + ", clientName="
         + this.getClientName()
         + ", clientUri="
         + this.getClientUri()
         + ", logoUri="
         + this.getLogoUri()
         + ", scope="
         + this.getScope()
         + ", contacts="
         + this.getContacts()
         + ", tosUri="
         + this.getTosUri()
         + ", policyUri="
         + this.getPolicyUri()
         + ", jwksUri="
         + this.getJwksUri()
         + ", jwks="
         + this.getJwks()
         + ", softwareId="
         + this.getSoftwareId()
         + ", softwareVersion="
         + this.getSoftwareVersion()
         + ", customProperties="
         + this.getCustomProperties()
         + ")";
   }
}
