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

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

public class CreateSiteByTemplate   {
  @JsonProperty("siteTemplateId")
  private String siteTemplateId;

  @JsonProperty("name")
  private String name;

  @JsonProperty("region")
  private String region;

  @JsonProperty("scenario")
  private String scenario;

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

  @JsonProperty("longitude")
  private Double longitude;

  @JsonProperty("latitude")
  private Double latitude;

  @JsonProperty("address")
  private String address;

  @JsonProperty("deviceAccountSetting")
  private DeviceAccountSettingOpenApiVo deviceAccountSetting;

  @JsonProperty("supportES")
  private Boolean supportES;

  @JsonProperty("supportL2")
  private Boolean supportL2;

  public CreateSiteByTemplate siteTemplateId(String siteTemplateId) {
    this.siteTemplateId = siteTemplateId;
    return this;
  }

  /**
   * Site template ID.
   * @return siteTemplateId
  */
  @ApiModelProperty(required = true, value = "Site template ID.")
  @NotNull


  public String getSiteTemplateId() {
    return siteTemplateId;
  }

  public void setSiteTemplateId(String siteTemplateId) {
    this.siteTemplateId = siteTemplateId;
  }

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

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

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

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

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

  public CreateSiteByTemplate 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 CreateSiteByTemplate 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 CreateSiteByTemplate 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 CreateSiteByTemplate 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 CreateSiteByTemplate deviceAccountSetting(DeviceAccountSettingOpenApiVo deviceAccountSetting) {
    this.deviceAccountSetting = deviceAccountSetting;
    return this;
  }

  /**
   * Get deviceAccountSetting
   * @return deviceAccountSetting
  */
  @ApiModelProperty(required = true, value = "")
  @NotNull

  @Valid

  public DeviceAccountSettingOpenApiVo getDeviceAccountSetting() {
    return deviceAccountSetting;
  }

  public void setDeviceAccountSetting(DeviceAccountSettingOpenApiVo deviceAccountSetting) {
    this.deviceAccountSetting = deviceAccountSetting;
  }

  public CreateSiteByTemplate 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 CreateSiteByTemplate 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;
    }
    CreateSiteByTemplate createSiteByTemplate = (CreateSiteByTemplate) o;
    return Objects.equals(this.siteTemplateId, createSiteByTemplate.siteTemplateId) &&
        Objects.equals(this.name, createSiteByTemplate.name) &&
        Objects.equals(this.region, createSiteByTemplate.region) &&
        Objects.equals(this.scenario, createSiteByTemplate.scenario) &&
        Objects.equals(this.tagIds, createSiteByTemplate.tagIds) &&
        Objects.equals(this.longitude, createSiteByTemplate.longitude) &&
        Objects.equals(this.latitude, createSiteByTemplate.latitude) &&
        Objects.equals(this.address, createSiteByTemplate.address) &&
        Objects.equals(this.deviceAccountSetting, createSiteByTemplate.deviceAccountSetting) &&
        Objects.equals(this.supportES, createSiteByTemplate.supportES) &&
        Objects.equals(this.supportL2, createSiteByTemplate.supportL2);
  }

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

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

