package com.airlock.iam.oauth2.infrastructure.transfer.documentation;

import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import java.util.Map;

@JsonPropertyOrder(
   {
         "sub",
         "name",
         "given_name",
         "family_name",
         "middle_name",
         "nickname",
         "preferred_username",
         "profile",
         "picture",
         "website",
         "email",
         "email_verified",
         "gender",
         "birthdate",
         "zoneinfo",
         "locale",
         "phone_number",
         "phone_number_verified",
         "updated_at",
         "address"
   }
)
@Schema(ref = "#/components/schemas/OpenIdConnectUserInfoResponseDataOverride")
public class OpenIdConnectUserInfoResponseData {
   @NotNull
   private String sub;
   private String name;
   @JsonProperty("given_name")
   private String givenName;
   @JsonProperty("family_name")
   private String familyName;
   private String middleName;
   private String nickname;
   private String preferredUsername;
   private String profile;
   private String picture;
   private String website;
   @Schema(description = "End-User's preferred email address.")
   private String email;
   private Boolean emailVerified;
   private String gender;
   @Schema(description = "End-User's birthday, represented as an ISO 8601:2004 YYYY-MM-DD format.")
   private String birthdate;
   private String zoneinfo;
   private String locale;
   @JsonProperty("phone_number")
   private String phoneNumber;
   private Boolean phoneNumberVerified;
   private OpenIdConnectUserInfoResponseData.OpenIdConnectUserInfoAddressData address;
   private Long updatedAt;
   private Map<String, Object> additionalClaims;

   @JsonAnyGetter
   public Map<String, Object> getAdditionalClaims() {
      return this.additionalClaims;
   }

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

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

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

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

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

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

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

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

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

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

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

   @SuppressFBWarnings(justification = "generated code")
   public Boolean getEmailVerified() {
      return this.emailVerified;
   }

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

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

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

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

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

   @SuppressFBWarnings(justification = "generated code")
   public Boolean getPhoneNumberVerified() {
      return this.phoneNumberVerified;
   }

   @SuppressFBWarnings(justification = "generated code")
   public OpenIdConnectUserInfoResponseData.OpenIdConnectUserInfoAddressData getAddress() {
      return this.address;
   }

   @SuppressFBWarnings(justification = "generated code")
   public Long getUpdatedAt() {
      return this.updatedAt;
   }

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

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

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

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

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

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

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

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

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

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

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

   @SuppressFBWarnings(justification = "generated code")
   public void setEmailVerified(Boolean emailVerified) {
      this.emailVerified = emailVerified;
   }

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

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

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

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

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

   @SuppressFBWarnings(justification = "generated code")
   public void setPhoneNumberVerified(Boolean phoneNumberVerified) {
      this.phoneNumberVerified = phoneNumberVerified;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setAddress(OpenIdConnectUserInfoResponseData.OpenIdConnectUserInfoAddressData address) {
      this.address = address;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setUpdatedAt(Long updatedAt) {
      this.updatedAt = updatedAt;
   }

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

   @SuppressFBWarnings(justification = "generated code")
   @Override
   public boolean equals(Object o) {
      if (o == this) {
         return true;
      } else if (!(o instanceof OpenIdConnectUserInfoResponseData other)) {
         return false;
      } else {
         if (!other.canEqual(this)) {
            return false;
         }

         Object this$emailVerified = this.emailVerified;
         Object other$emailVerified = other.emailVerified;
         if (this$emailVerified == null ? other$emailVerified == null : this$emailVerified.equals(other$emailVerified)) {
            Object this$phoneNumberVerified = this.phoneNumberVerified;
            Object other$phoneNumberVerified = other.phoneNumberVerified;
            if (this$phoneNumberVerified == null ? other$phoneNumberVerified == null : this$phoneNumberVerified.equals(other$phoneNumberVerified)) {
               Object this$updatedAt = this.updatedAt;
               Object other$updatedAt = other.updatedAt;
               if (this$updatedAt == null ? other$updatedAt == null : this$updatedAt.equals(other$updatedAt)) {
                  Object this$sub = this.sub;
                  Object other$sub = other.sub;
                  if (this$sub == null ? other$sub == null : this$sub.equals(other$sub)) {
                     Object this$name = this.name;
                     Object other$name = other.name;
                     if (this$name == null ? other$name == null : this$name.equals(other$name)) {
                        Object this$givenName = this.givenName;
                        Object other$givenName = other.givenName;
                        if (this$givenName == null ? other$givenName == null : this$givenName.equals(other$givenName)) {
                           Object this$familyName = this.familyName;
                           Object other$familyName = other.familyName;
                           if (this$familyName == null ? other$familyName == null : this$familyName.equals(other$familyName)) {
                              Object this$middleName = this.middleName;
                              Object other$middleName = other.middleName;
                              if (this$middleName == null ? other$middleName == null : this$middleName.equals(other$middleName)) {
                                 Object this$nickname = this.nickname;
                                 Object other$nickname = other.nickname;
                                 if (this$nickname == null ? other$nickname == null : this$nickname.equals(other$nickname)) {
                                    Object this$preferredUsername = this.preferredUsername;
                                    Object other$preferredUsername = other.preferredUsername;
                                    if (this$preferredUsername == null
                                       ? other$preferredUsername == null
                                       : this$preferredUsername.equals(other$preferredUsername)) {
                                       Object this$profile = this.profile;
                                       Object other$profile = other.profile;
                                       if (this$profile == null ? other$profile == null : this$profile.equals(other$profile)) {
                                          Object this$picture = this.picture;
                                          Object other$picture = other.picture;
                                          if (this$picture == null ? other$picture == null : this$picture.equals(other$picture)) {
                                             Object this$website = this.website;
                                             Object other$website = other.website;
                                             if (this$website == null ? other$website == null : this$website.equals(other$website)) {
                                                Object this$email = this.email;
                                                Object other$email = other.email;
                                                if (this$email == null ? other$email == null : this$email.equals(other$email)) {
                                                   Object this$gender = this.gender;
                                                   Object other$gender = other.gender;
                                                   if (this$gender == null ? other$gender == null : this$gender.equals(other$gender)) {
                                                      Object this$birthdate = this.birthdate;
                                                      Object other$birthdate = other.birthdate;
                                                      if (this$birthdate == null ? other$birthdate == null : this$birthdate.equals(other$birthdate)) {
                                                         Object this$zoneinfo = this.zoneinfo;
                                                         Object other$zoneinfo = other.zoneinfo;
                                                         if (this$zoneinfo == null ? other$zoneinfo == null : this$zoneinfo.equals(other$zoneinfo)) {
                                                            Object this$locale = this.locale;
                                                            Object other$locale = other.locale;
                                                            if (this$locale == null ? other$locale == null : this$locale.equals(other$locale)) {
                                                               Object this$phoneNumber = this.phoneNumber;
                                                               Object other$phoneNumber = other.phoneNumber;
                                                               if (this$phoneNumber == null
                                                                  ? other$phoneNumber == null
                                                                  : this$phoneNumber.equals(other$phoneNumber)) {
                                                                  Object this$address = this.address;
                                                                  Object other$address = other.address;
                                                                  if (this$address == null ? other$address == null : this$address.equals(other$address)) {
                                                                     Object this$additionalClaims = this.additionalClaims;
                                                                     Object other$additionalClaims = other.additionalClaims;
                                                                     return this$additionalClaims == null
                                                                        ? other$additionalClaims == null
                                                                        : this$additionalClaims.equals(other$additionalClaims);
                                                                  } 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;
                     }
                  } else {
                     return false;
                  }
               } else {
                  return false;
               }
            } else {
               return false;
            }
         } else {
            return false;
         }
      }
   }

   @SuppressFBWarnings(justification = "generated code")
   protected boolean canEqual(Object other) {
      return other instanceof OpenIdConnectUserInfoResponseData;
   }

   @SuppressFBWarnings(justification = "generated code")
   @Override
   public int hashCode() {
      int PRIME = 59;
      int result = 1;
      Object $emailVerified = this.emailVerified;
      result = result * 59 + ($emailVerified == null ? 43 : $emailVerified.hashCode());
      Object $phoneNumberVerified = this.phoneNumberVerified;
      result = result * 59 + ($phoneNumberVerified == null ? 43 : $phoneNumberVerified.hashCode());
      Object $updatedAt = this.updatedAt;
      result = result * 59 + ($updatedAt == null ? 43 : $updatedAt.hashCode());
      Object $sub = this.sub;
      result = result * 59 + ($sub == null ? 43 : $sub.hashCode());
      Object $name = this.name;
      result = result * 59 + ($name == null ? 43 : $name.hashCode());
      Object $givenName = this.givenName;
      result = result * 59 + ($givenName == null ? 43 : $givenName.hashCode());
      Object $familyName = this.familyName;
      result = result * 59 + ($familyName == null ? 43 : $familyName.hashCode());
      Object $middleName = this.middleName;
      result = result * 59 + ($middleName == null ? 43 : $middleName.hashCode());
      Object $nickname = this.nickname;
      result = result * 59 + ($nickname == null ? 43 : $nickname.hashCode());
      Object $preferredUsername = this.preferredUsername;
      result = result * 59 + ($preferredUsername == null ? 43 : $preferredUsername.hashCode());
      Object $profile = this.profile;
      result = result * 59 + ($profile == null ? 43 : $profile.hashCode());
      Object $picture = this.picture;
      result = result * 59 + ($picture == null ? 43 : $picture.hashCode());
      Object $website = this.website;
      result = result * 59 + ($website == null ? 43 : $website.hashCode());
      Object $email = this.email;
      result = result * 59 + ($email == null ? 43 : $email.hashCode());
      Object $gender = this.gender;
      result = result * 59 + ($gender == null ? 43 : $gender.hashCode());
      Object $birthdate = this.birthdate;
      result = result * 59 + ($birthdate == null ? 43 : $birthdate.hashCode());
      Object $zoneinfo = this.zoneinfo;
      result = result * 59 + ($zoneinfo == null ? 43 : $zoneinfo.hashCode());
      Object $locale = this.locale;
      result = result * 59 + ($locale == null ? 43 : $locale.hashCode());
      Object $phoneNumber = this.phoneNumber;
      result = result * 59 + ($phoneNumber == null ? 43 : $phoneNumber.hashCode());
      Object $address = this.address;
      result = result * 59 + ($address == null ? 43 : $address.hashCode());
      Object $additionalClaims = this.additionalClaims;
      return result * 59 + ($additionalClaims == null ? 43 : $additionalClaims.hashCode());
   }

   @SuppressFBWarnings(justification = "generated code")
   @Override
   public String toString() {
      return "OpenIdConnectUserInfoResponseData(sub="
         + this.getSub()
         + ", name="
         + this.getName()
         + ", givenName="
         + this.getGivenName()
         + ", familyName="
         + this.getFamilyName()
         + ", middleName="
         + this.getMiddleName()
         + ", nickname="
         + this.getNickname()
         + ", preferredUsername="
         + this.getPreferredUsername()
         + ", profile="
         + this.getProfile()
         + ", picture="
         + this.getPicture()
         + ", website="
         + this.getWebsite()
         + ", email="
         + this.getEmail()
         + ", emailVerified="
         + this.getEmailVerified()
         + ", gender="
         + this.getGender()
         + ", birthdate="
         + this.getBirthdate()
         + ", zoneinfo="
         + this.getZoneinfo()
         + ", locale="
         + this.getLocale()
         + ", phoneNumber="
         + this.getPhoneNumber()
         + ", phoneNumberVerified="
         + this.getPhoneNumberVerified()
         + ", address="
         + this.getAddress()
         + ", updatedAt="
         + this.getUpdatedAt()
         + ", additionalClaims="
         + this.getAdditionalClaims()
         + ")";
   }

   public static class OpenIdConnectUserInfoAddressData {
      @Schema(description = "Full mailing address, formatted for display or use on a mailing label.")
      private String formatted;
      @JsonProperty("street_address")
      @Schema(
         description = "Full street address component, which MAY include house number, street name, Post Office Box, and multi-line extended street address information."
      )
      private String streetAddress;
      @Schema(description = "City or locality component.")
      private String locality;
      @Schema(description = "State, province, prefecture, or region component.")
      private String region;
      @JsonProperty("postal_code")
      @Schema(description = "Zip code or postal code component.")
      private String postalCode;
      @Schema(description = "Country name component.")
      private String country;

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

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

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

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

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

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

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

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

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

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

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

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

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public boolean equals(Object o) {
         if (o == this) {
            return true;
         } else if (!(o instanceof OpenIdConnectUserInfoResponseData.OpenIdConnectUserInfoAddressData other)) {
            return false;
         } else {
            if (!other.canEqual(this)) {
               return false;
            }

            Object this$formatted = this.formatted;
            Object other$formatted = other.formatted;
            if (this$formatted == null ? other$formatted == null : this$formatted.equals(other$formatted)) {
               Object this$streetAddress = this.streetAddress;
               Object other$streetAddress = other.streetAddress;
               if (this$streetAddress == null ? other$streetAddress == null : this$streetAddress.equals(other$streetAddress)) {
                  Object this$locality = this.locality;
                  Object other$locality = other.locality;
                  if (this$locality == null ? other$locality == null : this$locality.equals(other$locality)) {
                     Object this$region = this.region;
                     Object other$region = other.region;
                     if (this$region == null ? other$region == null : this$region.equals(other$region)) {
                        Object this$postalCode = this.postalCode;
                        Object other$postalCode = other.postalCode;
                        if (this$postalCode == null ? other$postalCode == null : this$postalCode.equals(other$postalCode)) {
                           Object this$country = this.country;
                           Object other$country = other.country;
                           return this$country == null ? other$country == null : this$country.equals(other$country);
                        } else {
                           return false;
                        }
                     } else {
                        return false;
                     }
                  } else {
                     return false;
                  }
               } else {
                  return false;
               }
            } else {
               return false;
            }
         }
      }

      @SuppressFBWarnings(justification = "generated code")
      protected boolean canEqual(Object other) {
         return other instanceof OpenIdConnectUserInfoResponseData.OpenIdConnectUserInfoAddressData;
      }

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public int hashCode() {
         int PRIME = 59;
         int result = 1;
         Object $formatted = this.formatted;
         result = result * 59 + ($formatted == null ? 43 : $formatted.hashCode());
         Object $streetAddress = this.streetAddress;
         result = result * 59 + ($streetAddress == null ? 43 : $streetAddress.hashCode());
         Object $locality = this.locality;
         result = result * 59 + ($locality == null ? 43 : $locality.hashCode());
         Object $region = this.region;
         result = result * 59 + ($region == null ? 43 : $region.hashCode());
         Object $postalCode = this.postalCode;
         result = result * 59 + ($postalCode == null ? 43 : $postalCode.hashCode());
         Object $country = this.country;
         return result * 59 + ($country == null ? 43 : $country.hashCode());
      }

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public String toString() {
         return "OpenIdConnectUserInfoResponseData.OpenIdConnectUserInfoAddressData(formatted="
            + this.getFormatted()
            + ", streetAddress="
            + this.getStreetAddress()
            + ", locality="
            + this.getLocality()
            + ", region="
            + this.getRegion()
            + ", postalCode="
            + this.getPostalCode()
            + ", country="
            + this.getCountry()
            + ")";
      }
   }
}
