package org.wfc.omada.api.sitesetting.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;

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

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

  @JsonProperty("name")
  private String name;

  @JsonProperty("status")
  private Boolean status;

  @JsonProperty("interfaceIds")
  @Valid
  private List<String> interfaceIds = new ArrayList<>();

  @JsonProperty("internalIp")
  private String internalIp;

  @JsonProperty("externalIp")
  private String externalIp;

  @JsonProperty("dmz")
  private Boolean dmz;

  @JsonProperty("description")
  private String description;

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

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


  public String getId() {
    return id;
  }

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

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

  /**
   * Name should contain 1 to 64 characters.
   * @return name
  */
  @ApiModelProperty(required = true, value = "Name 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 OtoNatInfoOpenApiVo status(Boolean status) {
    this.status = status;
    return this;
  }

  /**
   * Status
   * @return status
  */
  @ApiModelProperty(required = true, value = "Status")
  @NotNull


  public Boolean getStatus() {
    return status;
  }

  public void setStatus(Boolean status) {
    this.status = status;
  }

  public OtoNatInfoOpenApiVo interfaceIds(List<String> interfaceIds) {
    this.interfaceIds = interfaceIds;
    return this;
  }

  public OtoNatInfoOpenApiVo addInterfaceIdsItem(String interfaceIdsItem) {
    this.interfaceIds.add(interfaceIdsItem);
    return this;
  }

  /**
   * This field represents WAN port ID. WAN port ID can be obtained from can be obtained from 'Get internet basic info' interface.
   * @return interfaceIds
  */
  @ApiModelProperty(required = true, value = "This field represents WAN port ID. WAN port ID can be obtained from can be obtained from 'Get internet basic info' interface.")
  @NotNull


  public List<String> getInterfaceIds() {
    return interfaceIds;
  }

  public void setInterfaceIds(List<String> interfaceIds) {
    this.interfaceIds = interfaceIds;
  }

  public OtoNatInfoOpenApiVo internalIp(String internalIp) {
    this.internalIp = internalIp;
    return this;
  }

  /**
   * Internal IP
   * @return internalIp
  */
  @ApiModelProperty(required = true, value = "Internal IP")
  @NotNull


  public String getInternalIp() {
    return internalIp;
  }

  public void setInternalIp(String internalIp) {
    this.internalIp = internalIp;
  }

  public OtoNatInfoOpenApiVo externalIp(String externalIp) {
    this.externalIp = externalIp;
    return this;
  }

  /**
   * External IP
   * @return externalIp
  */
  @ApiModelProperty(required = true, value = "External IP")
  @NotNull


  public String getExternalIp() {
    return externalIp;
  }

  public void setExternalIp(String externalIp) {
    this.externalIp = externalIp;
  }

  public OtoNatInfoOpenApiVo dmz(Boolean dmz) {
    this.dmz = dmz;
    return this;
  }

  /**
   * Whether to enable the DMZ
   * @return dmz
  */
  @ApiModelProperty(required = true, value = "Whether to enable the DMZ")
  @NotNull


  public Boolean getDmz() {
    return dmz;
  }

  public void setDmz(Boolean dmz) {
    this.dmz = dmz;
  }

  public OtoNatInfoOpenApiVo description(String description) {
    this.description = description;
    return this;
  }

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

@Pattern(regexp="^$|^[^ ]$|^[^ ].{0,62}[^ ]$") 
  public String getDescription() {
    return description;
  }

  public void setDescription(String description) {
    this.description = description;
  }


  @Override
  public boolean equals(Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    OtoNatInfoOpenApiVo otoNatInfoOpenApiVo = (OtoNatInfoOpenApiVo) o;
    return Objects.equals(this.id, otoNatInfoOpenApiVo.id) &&
        Objects.equals(this.name, otoNatInfoOpenApiVo.name) &&
        Objects.equals(this.status, otoNatInfoOpenApiVo.status) &&
        Objects.equals(this.interfaceIds, otoNatInfoOpenApiVo.interfaceIds) &&
        Objects.equals(this.internalIp, otoNatInfoOpenApiVo.internalIp) &&
        Objects.equals(this.externalIp, otoNatInfoOpenApiVo.externalIp) &&
        Objects.equals(this.dmz, otoNatInfoOpenApiVo.dmz) &&
        Objects.equals(this.description, otoNatInfoOpenApiVo.description);
  }

  @Override
  public int hashCode() {
    return Objects.hash(id, name, status, interfaceIds, internalIp, externalIp, dmz, description);
  }

  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class OtoNatInfoOpenApiVo {\n");
    
    sb.append("    id: ").append(toIndentedString(id)).append("\n");
    sb.append("    name: ").append(toIndentedString(name)).append("\n");
    sb.append("    status: ").append(toIndentedString(status)).append("\n");
    sb.append("    interfaceIds: ").append(toIndentedString(interfaceIds)).append("\n");
    sb.append("    internalIp: ").append(toIndentedString(internalIp)).append("\n");
    sb.append("    externalIp: ").append(toIndentedString(externalIp)).append("\n");
    sb.append("    dmz: ").append(toIndentedString(dmz)).append("\n");
    sb.append("    description: ").append(toIndentedString(description)).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    ");
  }
}

