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

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

import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

/**
 * UpdateSiteEntity
 */
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen", date = "2024-12-04T11:17:18.430+08:00[Asia/Shanghai]")

public class UpdateSiteEntity   {
  @JsonProperty("name")
  private String name;

  @JsonProperty("region")
  private String region;

  @JsonProperty("timeZone")
  private String timeZone;

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

  @JsonProperty("ntpEnable")
  private Boolean ntpEnable;

  @JsonProperty("ntpServers")
  @Valid
  private List<NtpServer> ntpServers = null;

  @JsonProperty("dst")
  private ModifyDstDto dst;

  @JsonProperty("scenario")
  private String scenario;

  @JsonProperty("longitude")
  private Double longitude;

  @JsonProperty("latitude")
  private Double latitude;

  @JsonProperty("address")
  private String address;

  @JsonProperty("supportES")
  private Boolean supportES;

  @JsonProperty("supportL2")
  private Boolean supportL2;

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

  /**
   * Site name should contain 1 to 64 characters.
   * @return name
  */
  @ApiModelProperty(value = "Site name should contain 1 to 64 characters.")

@Pattern(regexp="^[^ \\+\\-\\@\\=]$|^[^ \\+\\-\\@\\=].{0,62}[^ ]$") 
  public String getName() {
    return name;
  }

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

  public UpdateSiteEntity region(String region) {
    this.region = region;
    return this;
  }

  /**
   * Country/Region of the site; For the values of region, refer to the abbreviation of the ISO country code; For example, you need to input \"United States\" for the United States of America.
   * @return region
  */
  @ApiModelProperty(required = true, value = "Country/Region of the site; For the values of region, refer to the abbreviation of the ISO country code; For example, you need to input \"United States\" for the United States of America.")
  @NotNull


  public String getRegion() {
    return region;
  }

  public void setRegion(String region) {
    this.region = region;
  }

  public UpdateSiteEntity timeZone(String timeZone) {
    this.timeZone = timeZone;
    return this;
  }

  /**
   * For the values of the timezone of the site, refer to section 5.1 of the Open API Access Guide.
   * @return timeZone
  */
  @ApiModelProperty(required = true, value = "For the values of the timezone of the site, refer to section 5.1 of the Open API Access Guide.")
  @NotNull


  public String getTimeZone() {
    return timeZone;
  }

  public void setTimeZone(String timeZone) {
    this.timeZone = timeZone;
  }

  public UpdateSiteEntity tagIds(List<String> tagIds) {
    this.tagIds = tagIds;
    return this;
  }

  public UpdateSiteEntity addTagIdsItem(String tagIdsItem) {
    if (this.tagIds == null) {
      this.tagIds = new ArrayList<>();
    }
    this.tagIds.add(tagIdsItem);
    return this;
  }

  /**
   * Site tag ID, Site tag ID can be created using \"Create new site tag\" interface, and site tag ID can be obtained from \"Get site tag list\" interface
   * @return tagIds
  */
  @ApiModelProperty(value = "Site tag ID, Site tag ID can be created using \"Create new site tag\" interface, and site tag ID can be obtained from \"Get site tag list\" interface")


  public List<String> getTagIds() {
    return tagIds;
  }

  public void setTagIds(List<String> tagIds) {
    this.tagIds = tagIds;
  }

  public UpdateSiteEntity ntpEnable(Boolean ntpEnable) {
    this.ntpEnable = ntpEnable;
    return this;
  }

  /**
   * NTP server status of the site
   * @return ntpEnable
  */
  @ApiModelProperty(value = "NTP server status of the site")


  public Boolean getNtpEnable() {
    return ntpEnable;
  }

  public void setNtpEnable(Boolean ntpEnable) {
    this.ntpEnable = ntpEnable;
  }

  public UpdateSiteEntity ntpServers(List<NtpServer> ntpServers) {
    this.ntpServers = ntpServers;
    return this;
  }

  public UpdateSiteEntity addNtpServersItem(NtpServer ntpServersItem) {
    if (this.ntpServers == null) {
      this.ntpServers = new ArrayList<>();
    }
    this.ntpServers.add(ntpServersItem);
    return this;
  }

  /**
   * NTP server address; Up to 5 entries are allowed for the NTP server address list.
   * @return ntpServers
  */
  @ApiModelProperty(value = "NTP server address; Up to 5 entries are allowed for the NTP server address list.")

  @Valid
@Size(min=0,max=5) 
  public List<NtpServer> getNtpServers() {
    return ntpServers;
  }

  public void setNtpServers(List<NtpServer> ntpServers) {
    this.ntpServers = ntpServers;
  }

  public UpdateSiteEntity dst(ModifyDstDto dst) {
    this.dst = dst;
    return this;
  }

  /**
   * Get dst
   * @return dst
  */
  @ApiModelProperty(value = "")

  @Valid

  public ModifyDstDto getDst() {
    return dst;
  }

  public void setDst(ModifyDstDto dst) {
    this.dst = dst;
  }

  public UpdateSiteEntity scenario(String scenario) {
    this.scenario = scenario;
    return this;
  }

  /**
   * For the values of the scenario of the site, refer to result of the interface for Get scenario list.
   * @return scenario
  */
  @ApiModelProperty(required = true, value = "For the values of the scenario of the site, refer to result of the interface for Get scenario list.")
  @NotNull


  public String getScenario() {
    return scenario;
  }

  public void setScenario(String scenario) {
    this.scenario = scenario;
  }

  public UpdateSiteEntity longitude(Double longitude) {
    this.longitude = longitude;
    return this;
  }

  /**
   * Longitude of the site should be within the range of -180 - 180.
   * @return longitude
  */
  @ApiModelProperty(value = "Longitude of the site should be within the range of -180 - 180.")


  public Double getLongitude() {
    return longitude;
  }

  public void setLongitude(Double longitude) {
    this.longitude = longitude;
  }

  public UpdateSiteEntity latitude(Double latitude) {
    this.latitude = latitude;
    return this;
  }

  /**
   * Latitude of the site should be within the range of -90 - 90.
   * @return latitude
  */
  @ApiModelProperty(value = "Latitude of the site should be within the range of -90 - 90.")


  public Double getLatitude() {
    return latitude;
  }

  public void setLatitude(Double latitude) {
    this.latitude = latitude;
  }

  public UpdateSiteEntity address(String address) {
    this.address = address;
    return this;
  }

  /**
   * Address of the site
   * @return address
  */
  @ApiModelProperty(value = "Address of the site")


  public String getAddress() {
    return address;
  }

  public void setAddress(String address) {
    this.address = address;
  }

  public UpdateSiteEntity supportES(Boolean supportES) {
    this.supportES = supportES;
    return this;
  }

  /**
   * Whether the site supports adopting Easy Managed switches
   * @return supportES
  */
  @ApiModelProperty(value = "Whether the site supports adopting Easy Managed switches")


  public Boolean getSupportES() {
    return supportES;
  }

  public void setSupportES(Boolean supportES) {
    this.supportES = supportES;
  }

  public UpdateSiteEntity supportL2(Boolean supportL2) {
    this.supportL2 = supportL2;
    return this;
  }

  /**
   * Whether the site supports adopting Smart+ or L2+ or L3 switches
   * @return supportL2
  */
  @ApiModelProperty(value = "Whether the site supports adopting Smart+ or L2+ or L3 switches")


  public Boolean getSupportL2() {
    return supportL2;
  }

  public void setSupportL2(Boolean supportL2) {
    this.supportL2 = supportL2;
  }


  @Override
  public boolean equals(Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    UpdateSiteEntity updateSiteEntity = (UpdateSiteEntity) o;
    return Objects.equals(this.name, updateSiteEntity.name) &&
        Objects.equals(this.region, updateSiteEntity.region) &&
        Objects.equals(this.timeZone, updateSiteEntity.timeZone) &&
        Objects.equals(this.tagIds, updateSiteEntity.tagIds) &&
        Objects.equals(this.ntpEnable, updateSiteEntity.ntpEnable) &&
        Objects.equals(this.ntpServers, updateSiteEntity.ntpServers) &&
        Objects.equals(this.dst, updateSiteEntity.dst) &&
        Objects.equals(this.scenario, updateSiteEntity.scenario) &&
        Objects.equals(this.longitude, updateSiteEntity.longitude) &&
        Objects.equals(this.latitude, updateSiteEntity.latitude) &&
        Objects.equals(this.address, updateSiteEntity.address) &&
        Objects.equals(this.supportES, updateSiteEntity.supportES) &&
        Objects.equals(this.supportL2, updateSiteEntity.supportL2);
  }

  @Override
  public int hashCode() {
    return Objects.hash(name, region, timeZone, tagIds, ntpEnable, ntpServers, dst, scenario, longitude, latitude, address, supportES, supportL2);
  }

  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class UpdateSiteEntity {\n");
    
    sb.append("    name: ").append(toIndentedString(name)).append("\n");
    sb.append("    region: ").append(toIndentedString(region)).append("\n");
    sb.append("    timeZone: ").append(toIndentedString(timeZone)).append("\n");
    sb.append("    tagIds: ").append(toIndentedString(tagIds)).append("\n");
    sb.append("    ntpEnable: ").append(toIndentedString(ntpEnable)).append("\n");
    sb.append("    ntpServers: ").append(toIndentedString(ntpServers)).append("\n");
    sb.append("    dst: ").append(toIndentedString(dst)).append("\n");
    sb.append("    scenario: ").append(toIndentedString(scenario)).append("\n");
    sb.append("    longitude: ").append(toIndentedString(longitude)).append("\n");
    sb.append("    latitude: ").append(toIndentedString(latitude)).append("\n");
    sb.append("    address: ").append(toIndentedString(address)).append("\n");
    sb.append("    supportES: ").append(toIndentedString(supportES)).append("\n");
    sb.append("    supportL2: ").append(toIndentedString(supportL2)).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    ");
  }
}

