package org.wfc.omada.api.account.model;

import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModelProperty;

import javax.validation.Valid;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

/**
 * UserDetailVo
 */
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen", date = "2024-12-04T10:44:52.771+08:00[Asia/Shanghai]")

public class UserDetailVo   {
  @JsonProperty("id")
  private String id;

  @JsonProperty("type")
  private Integer type;

  @JsonProperty("roleId")
  private String roleId;

  @JsonProperty("roleName")
  private String roleName;

  @JsonProperty("name")
  private String name;

  @JsonProperty("email")
  private String email;

  @JsonProperty("omadacId")
  private String omadacId;

  @JsonProperty("verified")
  private Boolean verified;

  @JsonProperty("alert")
  private Boolean alert;

  @JsonProperty("allSite")
  private Boolean allSite;

  @JsonProperty("siteIds")
  @Valid
  private List<String> siteIds = null;

  @JsonProperty("parentUserId")
  private String parentUserId;

  @JsonProperty("favorites")
  @Valid
  private List<String> favorites = null;

  @JsonProperty("incidentNotification")
  private Boolean incidentNotification;

  @JsonProperty("userLevel")
  private Integer userLevel;

  public UserDetailVo id(String id) {
    this.id = id;
    return this;
  }

  /**
   * User ID
   * @return id
  */
  @ApiModelProperty(value = "User ID")


  public String getId() {
    return id;
  }

  public void setId(String id) {
    this.id = id;
  }

  public UserDetailVo type(Integer type) {
    this.type = type;
    return this;
  }

  /**
   * Type of user, type should be a value as follows: 0:local user; 1: cloud user
   * @return type
  */
  @ApiModelProperty(value = "Type of user, type should be a value as follows: 0:local user; 1: cloud user")


  public Integer getType() {
    return type;
  }

  public void setType(Integer type) {
    this.type = type;
  }

  public UserDetailVo roleId(String roleId) {
    this.roleId = roleId;
    return this;
  }

  /**
   * User role ID
   * @return roleId
  */
  @ApiModelProperty(value = "User role ID")


  public String getRoleId() {
    return roleId;
  }

  public void setRoleId(String roleId) {
    this.roleId = roleId;
  }

  public UserDetailVo roleName(String roleName) {
    this.roleName = roleName;
    return this;
  }

  /**
   * User bind role name
   * @return roleName
  */
  @ApiModelProperty(value = "User bind role name")


  public String getRoleName() {
    return roleName;
  }

  public void setRoleName(String roleName) {
    this.roleName = roleName;
  }

  public UserDetailVo name(String name) {
    this.name = name;
    return this;
  }

  /**
   * User name
   * @return name
  */
  @ApiModelProperty(value = "User name")


  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public UserDetailVo email(String email) {
    this.email = email;
    return this;
  }

  /**
   * User email
   * @return email
  */
  @ApiModelProperty(value = "User email")


  public String getEmail() {
    return email;
  }

  public void setEmail(String email) {
    this.email = email;
  }

  public UserDetailVo omadacId(String omadacId) {
    this.omadacId = omadacId;
    return this;
  }

  /**
   * Omada ID
   * @return omadacId
  */
  @ApiModelProperty(value = "Omada ID")


  public String getOmadacId() {
    return omadacId;
  }

  public void setOmadacId(String omadacId) {
    this.omadacId = omadacId;
  }

  public UserDetailVo verified(Boolean verified) {
    this.verified = verified;
    return this;
  }

  /**
   * Whether this cloud user has verified
   * @return verified
  */
  @ApiModelProperty(value = "Whether this cloud user has verified")


  public Boolean getVerified() {
    return verified;
  }

  public void setVerified(Boolean verified) {
    this.verified = verified;
  }

  public UserDetailVo alert(Boolean alert) {
    this.alert = alert;
    return this;
  }

  /**
   * Whether this user want to receive alert emails
   * @return alert
  */
  @ApiModelProperty(value = "Whether this user want to receive alert emails")


  public Boolean getAlert() {
    return alert;
  }

  public void setAlert(Boolean alert) {
    this.alert = alert;
  }

  public UserDetailVo allSite(Boolean allSite) {
    this.allSite = allSite;
    return this;
  }

  /**
   * Whether user has all site permission, including new created site
   * @return allSite
  */
  @ApiModelProperty(value = "Whether user has all site permission, including new created site")


  public Boolean getAllSite() {
    return allSite;
  }

  public void setAllSite(Boolean allSite) {
    this.allSite = allSite;
  }

  public UserDetailVo siteIds(List<String> siteIds) {
    this.siteIds = siteIds;
    return this;
  }

  public UserDetailVo addSiteIdsItem(String siteIdsItem) {
    if (this.siteIds == null) {
      this.siteIds = new ArrayList<>();
    }
    this.siteIds.add(siteIdsItem);
    return this;
  }

  /**
   * User site privilege list
   * @return siteIds
  */
  @ApiModelProperty(value = "User site privilege list")


  public List<String> getSiteIds() {
    return siteIds;
  }

  public void setSiteIds(List<String> siteIds) {
    this.siteIds = siteIds;
  }

  public UserDetailVo parentUserId(String parentUserId) {
    this.parentUserId = parentUserId;
    return this;
  }

  /**
   * User's parent user id
   * @return parentUserId
  */
  @ApiModelProperty(value = "User's parent user id")


  public String getParentUserId() {
    return parentUserId;
  }

  public void setParentUserId(String parentUserId) {
    this.parentUserId = parentUserId;
  }

  public UserDetailVo favorites(List<String> favorites) {
    this.favorites = favorites;
    return this;
  }

  public UserDetailVo addFavoritesItem(String favoritesItem) {
    if (this.favorites == null) {
      this.favorites = new ArrayList<>();
    }
    this.favorites.add(favoritesItem);
    return this;
  }

  /**
   * User favorite site list
   * @return favorites
  */
  @ApiModelProperty(value = "User favorite site list")


  public List<String> getFavorites() {
    return favorites;
  }

  public void setFavorites(List<String> favorites) {
    this.favorites = favorites;
  }

  public UserDetailVo incidentNotification(Boolean incidentNotification) {
    this.incidentNotification = incidentNotification;
    return this;
  }

  /**
   * Incident notification
   * @return incidentNotification
  */
  @ApiModelProperty(value = "Incident notification")


  public Boolean getIncidentNotification() {
    return incidentNotification;
  }

  public void setIncidentNotification(Boolean incidentNotification) {
    this.incidentNotification = incidentNotification;
  }

  public UserDetailVo userLevel(Integer userLevel) {
    this.userLevel = userLevel;
    return this;
  }

  /**
   * User level, user level should be a value as follows: 0:standard user; 1:customer user; 2:msp user
   * @return userLevel
  */
  @ApiModelProperty(value = "User level, user level should be a value as follows: 0:standard user; 1:customer user; 2:msp user")


  public Integer getUserLevel() {
    return userLevel;
  }

  public void setUserLevel(Integer userLevel) {
    this.userLevel = userLevel;
  }


  @Override
  public boolean equals(Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    UserDetailVo userDetailVo = (UserDetailVo) o;
    return Objects.equals(this.id, userDetailVo.id) &&
        Objects.equals(this.type, userDetailVo.type) &&
        Objects.equals(this.roleId, userDetailVo.roleId) &&
        Objects.equals(this.roleName, userDetailVo.roleName) &&
        Objects.equals(this.name, userDetailVo.name) &&
        Objects.equals(this.email, userDetailVo.email) &&
        Objects.equals(this.omadacId, userDetailVo.omadacId) &&
        Objects.equals(this.verified, userDetailVo.verified) &&
        Objects.equals(this.alert, userDetailVo.alert) &&
        Objects.equals(this.allSite, userDetailVo.allSite) &&
        Objects.equals(this.siteIds, userDetailVo.siteIds) &&
        Objects.equals(this.parentUserId, userDetailVo.parentUserId) &&
        Objects.equals(this.favorites, userDetailVo.favorites) &&
        Objects.equals(this.incidentNotification, userDetailVo.incidentNotification) &&
        Objects.equals(this.userLevel, userDetailVo.userLevel);
  }

  @Override
  public int hashCode() {
    return Objects.hash(id, type, roleId, roleName, name, email, omadacId, verified, alert, allSite, siteIds, parentUserId, favorites, incidentNotification, userLevel);
  }

  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class UserDetailVo {\n");
    
    sb.append("    id: ").append(toIndentedString(id)).append("\n");
    sb.append("    type: ").append(toIndentedString(type)).append("\n");
    sb.append("    roleId: ").append(toIndentedString(roleId)).append("\n");
    sb.append("    roleName: ").append(toIndentedString(roleName)).append("\n");
    sb.append("    name: ").append(toIndentedString(name)).append("\n");
    sb.append("    email: ").append(toIndentedString(email)).append("\n");
    sb.append("    omadacId: ").append(toIndentedString(omadacId)).append("\n");
    sb.append("    verified: ").append(toIndentedString(verified)).append("\n");
    sb.append("    alert: ").append(toIndentedString(alert)).append("\n");
    sb.append("    allSite: ").append(toIndentedString(allSite)).append("\n");
    sb.append("    siteIds: ").append(toIndentedString(siteIds)).append("\n");
    sb.append("    parentUserId: ").append(toIndentedString(parentUserId)).append("\n");
    sb.append("    favorites: ").append(toIndentedString(favorites)).append("\n");
    sb.append("    incidentNotification: ").append(toIndentedString(incidentNotification)).append("\n");
    sb.append("    userLevel: ").append(toIndentedString(userLevel)).append("\n");
    sb.append("}");
    return sb.toString();
  }

  /**
   * Convert the given object to string with each line indented by 4 spaces
   * (except the first line).
   */
  private String toIndentedString(Object o) {
    if (o == null) {
      return "null";
    }
    return o.toString().replace("\n", "\n    ");
  }
}

