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.Size;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

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

public class SiteEntity   {
  @JsonProperty("siteId")
  private String siteId;

  @JsonProperty("name")
  private String name;

  @JsonProperty("type")
  private Integer type;

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

  @JsonProperty("region")
  private String region;

  @JsonProperty("timeZone")
  private String timeZone;

  @JsonProperty("ntpEnable")
  private Boolean ntpEnable;

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

  @JsonProperty("dst")
  private DstDto 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 SiteEntity siteId(String siteId) {
    this.siteId = siteId;
    return this;
  }

  /**
   * Site ID
   * @return siteId
  */
  @ApiModelProperty(value = "Site ID")


  public String getSiteId() {
    return siteId;
  }

  public void setSiteId(String siteId) {
    this.siteId = siteId;
  }

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

  /**
   * Name of the site should contain 1 to 64 characters.
   * @return name
  */
  @ApiModelProperty(value = "Name of the site should contain 1 to 64 characters.")


  public String getName() {
    return name;
  }

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

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

  /**
   * Type of the site should be 0 or 1, and 0 means basic site, 1 means pro site.
   * @return type
  */
  @ApiModelProperty(value = "Type of the site should be 0 or 1, and 0 means basic site, 1 means pro site.")


  public Integer getType() {
    return type;
  }

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

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

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

  /**
   * Site tag ID
   * @return tagIds
  */
  @ApiModelProperty(value = "Site tag ID")


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

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

  public SiteEntity 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(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.")


  public String getRegion() {
    return region;
  }

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

  public SiteEntity 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(value = "For the values of the timezone of the site, refer to section 5.1 of the Open API Access Guide.")


  public String getTimeZone() {
    return timeZone;
  }

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

  public SiteEntity 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 SiteEntity ntpServers(List<String> ntpServers) {
    this.ntpServers = ntpServers;
    return this;
  }

  public SiteEntity addNtpServersItem(String 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.")

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

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

  public SiteEntity dst(DstDto dst) {
    this.dst = dst;
    return this;
  }

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

  @Valid

  public DstDto getDst() {
    return dst;
  }

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

  public SiteEntity 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(value = "For the values of the scenario of the site, refer to result of the interface for Get scenario list.")


  public String getScenario() {
    return scenario;
  }

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

  public SiteEntity 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 SiteEntity 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 SiteEntity 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 SiteEntity 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 SiteEntity 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;
    }
    SiteEntity siteEntity = (SiteEntity) o;
    return Objects.equals(this.siteId, siteEntity.siteId) &&
        Objects.equals(this.name, siteEntity.name) &&
        Objects.equals(this.type, siteEntity.type) &&
        Objects.equals(this.tagIds, siteEntity.tagIds) &&
        Objects.equals(this.region, siteEntity.region) &&
        Objects.equals(this.timeZone, siteEntity.timeZone) &&
        Objects.equals(this.ntpEnable, siteEntity.ntpEnable) &&
        Objects.equals(this.ntpServers, siteEntity.ntpServers) &&
        Objects.equals(this.dst, siteEntity.dst) &&
        Objects.equals(this.scenario, siteEntity.scenario) &&
        Objects.equals(this.longitude, siteEntity.longitude) &&
        Objects.equals(this.latitude, siteEntity.latitude) &&
        Objects.equals(this.address, siteEntity.address) &&
        Objects.equals(this.supportES, siteEntity.supportES) &&
        Objects.equals(this.supportL2, siteEntity.supportL2);
  }

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

  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class SiteEntity {\n");
    
    sb.append("    siteId: ").append(toIndentedString(siteId)).append("\n");
    sb.append("    name: ").append(toIndentedString(name)).append("\n");
    sb.append("    type: ").append(toIndentedString(type)).append("\n");
    sb.append("    tagIds: ").append(toIndentedString(tagIds)).append("\n");
    sb.append("    region: ").append(toIndentedString(region)).append("\n");
    sb.append("    timeZone: ").append(toIndentedString(timeZone)).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    ");
  }
}

