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;

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

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

  @JsonProperty("flag")
  private Integer flag;

  @JsonProperty("name")
  private String name;

  @JsonProperty("poe")
  private Integer poe;

  @JsonProperty("nativeNetworkId")
  private String nativeNetworkId;

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

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

  @JsonProperty("voiceNetworkId")
  private String voiceNetworkId;

  @JsonProperty("dot1x")
  private Integer dot1x;

  @JsonProperty("portIsolationEnable")
  private Boolean portIsolationEnable;

  @JsonProperty("lldpMedEnable")
  private Boolean lldpMedEnable;

  @JsonProperty("topoNotifyEnable")
  private Boolean topoNotifyEnable;

  @JsonProperty("bandWidthCtrlType")
  private Integer bandWidthCtrlType;

  @JsonProperty("stormCtrl")
  private StormCtrlEntity stormCtrl;

  @JsonProperty("bandCtrl")
  private BandCtrlEntity bandCtrl;

  @JsonProperty("spanningTreeEnable")
  private Boolean spanningTreeEnable;

  @JsonProperty("loopbackDetectEnable")
  private Boolean loopbackDetectEnable;

  @JsonProperty("eeeEnable")
  private Boolean eeeEnable;

  @JsonProperty("flowControlEnable")
  private Boolean flowControlEnable;

  @JsonProperty("loopbackDetectVlanBasedEnable")
  private Boolean loopbackDetectVlanBasedEnable;

  @JsonProperty("dhcpL2RelaySettings")
  private DhcpL2RelayEntity dhcpL2RelaySettings;

  @JsonProperty("type")
  private Integer type;

  @JsonProperty("supportESEnable")
  private Boolean supportESEnable;

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

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


  public String getId() {
    return id;
  }

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

  public LanProfileOpenApiVo flag(Integer flag) {
    this.flag = flag;
    return this;
  }

  /**
   * Flag should be a value as follows: 0: default(all,disable,LAN), 1: native(generated by creating LAN network), 2: customize(created by users)
   * @return flag
  */
  @ApiModelProperty(value = "Flag should be a value as follows: 0: default(all,disable,LAN), 1: native(generated by creating LAN network), 2: customize(created by users)")


  public Integer getFlag() {
    return flag;
  }

  public void setFlag(Integer flag) {
    this.flag = flag;
  }

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

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

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

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

  public LanProfileOpenApiVo poe(Integer poe) {
    this.poe = poe;
    return this;
  }

  /**
   * PoE should be a value as follows: 0: on, 1: off, 2: \"do not modify\"
   * @return poe
  */
  @ApiModelProperty(required = true, value = "PoE should be a value as follows: 0: on, 1: off, 2: \"do not modify\"")
  @NotNull


  public Integer getPoe() {
    return poe;
  }

  public void setPoe(Integer poe) {
    this.poe = poe;
  }

  public LanProfileOpenApiVo nativeNetworkId(String nativeNetworkId) {
    this.nativeNetworkId = nativeNetworkId;
    return this;
  }

  /**
   * Native network ID, Native Network cannot be selected from Tagged Networks or Untagged Networks.
   * @return nativeNetworkId
  */
  @ApiModelProperty(value = "Native network ID, Native Network cannot be selected from Tagged Networks or Untagged Networks.")


  public String getNativeNetworkId() {
    return nativeNetworkId;
  }

  public void setNativeNetworkId(String nativeNetworkId) {
    this.nativeNetworkId = nativeNetworkId;
  }

  public LanProfileOpenApiVo tagNetworkIds(List<String> tagNetworkIds) {
    this.tagNetworkIds = tagNetworkIds;
    return this;
  }

  public LanProfileOpenApiVo addTagNetworkIdsItem(String tagNetworkIdsItem) {
    if (this.tagNetworkIds == null) {
      this.tagNetworkIds = new ArrayList<>();
    }
    this.tagNetworkIds.add(tagNetworkIdsItem);
    return this;
  }

  /**
   * Tag network IDs
   * @return tagNetworkIds
  */
  @ApiModelProperty(value = "Tag network IDs")


  public List<String> getTagNetworkIds() {
    return tagNetworkIds;
  }

  public void setTagNetworkIds(List<String> tagNetworkIds) {
    this.tagNetworkIds = tagNetworkIds;
  }

  public LanProfileOpenApiVo untagNetworkIds(List<String> untagNetworkIds) {
    this.untagNetworkIds = untagNetworkIds;
    return this;
  }

  public LanProfileOpenApiVo addUntagNetworkIdsItem(String untagNetworkIdsItem) {
    if (this.untagNetworkIds == null) {
      this.untagNetworkIds = new ArrayList<>();
    }
    this.untagNetworkIds.add(untagNetworkIdsItem);
    return this;
  }

  /**
   * Untag network IDs
   * @return untagNetworkIds
  */
  @ApiModelProperty(value = "Untag network IDs")


  public List<String> getUntagNetworkIds() {
    return untagNetworkIds;
  }

  public void setUntagNetworkIds(List<String> untagNetworkIds) {
    this.untagNetworkIds = untagNetworkIds;
  }

  public LanProfileOpenApiVo voiceNetworkId(String voiceNetworkId) {
    this.voiceNetworkId = voiceNetworkId;
    return this;
  }

  /**
   * Voice Network ID
   * @return voiceNetworkId
  */
  @ApiModelProperty(value = "Voice Network ID")


  public String getVoiceNetworkId() {
    return voiceNetworkId;
  }

  public void setVoiceNetworkId(String voiceNetworkId) {
    this.voiceNetworkId = voiceNetworkId;
  }

  public LanProfileOpenApiVo dot1x(Integer dot1x) {
    this.dot1x = dot1x;
    return this;
  }

  /**
   * Dot1x should be a value as follows: 0: force unauthorized, 1: force authorized, 2:auto
   * @return dot1x
  */
  @ApiModelProperty(required = true, value = "Dot1x should be a value as follows: 0: force unauthorized, 1: force authorized, 2:auto")
  @NotNull


  public Integer getDot1x() {
    return dot1x;
  }

  public void setDot1x(Integer dot1x) {
    this.dot1x = dot1x;
  }

  public LanProfileOpenApiVo portIsolationEnable(Boolean portIsolationEnable) {
    this.portIsolationEnable = portIsolationEnable;
    return this;
  }

  /**
   * Port-isolation enable status
   * @return portIsolationEnable
  */
  @ApiModelProperty(required = true, value = "Port-isolation enable status")
  @NotNull


  public Boolean getPortIsolationEnable() {
    return portIsolationEnable;
  }

  public void setPortIsolationEnable(Boolean portIsolationEnable) {
    this.portIsolationEnable = portIsolationEnable;
  }

  public LanProfileOpenApiVo lldpMedEnable(Boolean lldpMedEnable) {
    this.lldpMedEnable = lldpMedEnable;
    return this;
  }

  /**
   * LLDP-MED enable status
   * @return lldpMedEnable
  */
  @ApiModelProperty(required = true, value = "LLDP-MED enable status")
  @NotNull


  public Boolean getLldpMedEnable() {
    return lldpMedEnable;
  }

  public void setLldpMedEnable(Boolean lldpMedEnable) {
    this.lldpMedEnable = lldpMedEnable;
  }

  public LanProfileOpenApiVo topoNotifyEnable(Boolean topoNotifyEnable) {
    this.topoNotifyEnable = topoNotifyEnable;
    return this;
  }

  /**
   * TopoNotify enable status
   * @return topoNotifyEnable
  */
  @ApiModelProperty(value = "TopoNotify enable status")


  public Boolean getTopoNotifyEnable() {
    return topoNotifyEnable;
  }

  public void setTopoNotifyEnable(Boolean topoNotifyEnable) {
    this.topoNotifyEnable = topoNotifyEnable;
  }

  public LanProfileOpenApiVo bandWidthCtrlType(Integer bandWidthCtrlType) {
    this.bandWidthCtrlType = bandWidthCtrlType;
    return this;
  }

  /**
   * BandWidthCtrlType should be a value as follows: 0: off, 1: rate limit, 2: storming control
   * @return bandWidthCtrlType
  */
  @ApiModelProperty(required = true, value = "BandWidthCtrlType should be a value as follows: 0: off, 1: rate limit, 2: storming control")
  @NotNull


  public Integer getBandWidthCtrlType() {
    return bandWidthCtrlType;
  }

  public void setBandWidthCtrlType(Integer bandWidthCtrlType) {
    this.bandWidthCtrlType = bandWidthCtrlType;
  }

  public LanProfileOpenApiVo stormCtrl(StormCtrlEntity stormCtrl) {
    this.stormCtrl = stormCtrl;
    return this;
  }

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

  @Valid

  public StormCtrlEntity getStormCtrl() {
    return stormCtrl;
  }

  public void setStormCtrl(StormCtrlEntity stormCtrl) {
    this.stormCtrl = stormCtrl;
  }

  public LanProfileOpenApiVo bandCtrl(BandCtrlEntity bandCtrl) {
    this.bandCtrl = bandCtrl;
    return this;
  }

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

  @Valid

  public BandCtrlEntity getBandCtrl() {
    return bandCtrl;
  }

  public void setBandCtrl(BandCtrlEntity bandCtrl) {
    this.bandCtrl = bandCtrl;
  }

  public LanProfileOpenApiVo spanningTreeEnable(Boolean spanningTreeEnable) {
    this.spanningTreeEnable = spanningTreeEnable;
    return this;
  }

  /**
   * SpanningTree enable status
   * @return spanningTreeEnable
  */
  @ApiModelProperty(required = true, value = "SpanningTree enable status")
  @NotNull


  public Boolean getSpanningTreeEnable() {
    return spanningTreeEnable;
  }

  public void setSpanningTreeEnable(Boolean spanningTreeEnable) {
    this.spanningTreeEnable = spanningTreeEnable;
  }

  public LanProfileOpenApiVo loopbackDetectEnable(Boolean loopbackDetectEnable) {
    this.loopbackDetectEnable = loopbackDetectEnable;
    return this;
  }

  /**
   * LoopbackDetect enable status
   * @return loopbackDetectEnable
  */
  @ApiModelProperty(required = true, value = "LoopbackDetect enable status")
  @NotNull


  public Boolean getLoopbackDetectEnable() {
    return loopbackDetectEnable;
  }

  public void setLoopbackDetectEnable(Boolean loopbackDetectEnable) {
    this.loopbackDetectEnable = loopbackDetectEnable;
  }

  public LanProfileOpenApiVo eeeEnable(Boolean eeeEnable) {
    this.eeeEnable = eeeEnable;
    return this;
  }

  /**
   * EEE enable status
   * @return eeeEnable
  */
  @ApiModelProperty(value = "EEE enable status")


  public Boolean getEeeEnable() {
    return eeeEnable;
  }

  public void setEeeEnable(Boolean eeeEnable) {
    this.eeeEnable = eeeEnable;
  }

  public LanProfileOpenApiVo flowControlEnable(Boolean flowControlEnable) {
    this.flowControlEnable = flowControlEnable;
    return this;
  }

  /**
   * FlowControl enable status
   * @return flowControlEnable
  */
  @ApiModelProperty(value = "FlowControl enable status")


  public Boolean getFlowControlEnable() {
    return flowControlEnable;
  }

  public void setFlowControlEnable(Boolean flowControlEnable) {
    this.flowControlEnable = flowControlEnable;
  }

  public LanProfileOpenApiVo loopbackDetectVlanBasedEnable(Boolean loopbackDetectVlanBasedEnable) {
    this.loopbackDetectVlanBasedEnable = loopbackDetectVlanBasedEnable;
    return this;
  }

  /**
   * LoopbackDetectVLANBased enable status
   * @return loopbackDetectVlanBasedEnable
  */
  @ApiModelProperty(value = "LoopbackDetectVLANBased enable status")


  public Boolean getLoopbackDetectVlanBasedEnable() {
    return loopbackDetectVlanBasedEnable;
  }

  public void setLoopbackDetectVlanBasedEnable(Boolean loopbackDetectVlanBasedEnable) {
    this.loopbackDetectVlanBasedEnable = loopbackDetectVlanBasedEnable;
  }

  public LanProfileOpenApiVo dhcpL2RelaySettings(DhcpL2RelayEntity dhcpL2RelaySettings) {
    this.dhcpL2RelaySettings = dhcpL2RelaySettings;
    return this;
  }

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

  @Valid

  public DhcpL2RelayEntity getDhcpL2RelaySettings() {
    return dhcpL2RelaySettings;
  }

  public void setDhcpL2RelaySettings(DhcpL2RelayEntity dhcpL2RelaySettings) {
    this.dhcpL2RelaySettings = dhcpL2RelaySettings;
  }

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

  /**
   * Type should be a value as follows: 0: LAN profile-ALL, 1: LAN profile-Disable, 2: LAN Profile except ALL and Disable
   * @return type
  */
  @ApiModelProperty(value = "Type should be a value as follows: 0: LAN profile-ALL, 1: LAN profile-Disable, 2: LAN Profile except ALL and Disable")


  public Integer getType() {
    return type;
  }

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

  public LanProfileOpenApiVo supportESEnable(Boolean supportESEnable) {
    this.supportESEnable = supportESEnable;
    return this;
  }

  /**
   * Easy managed switch enable status. The default value is false
   * @return supportESEnable
  */
  @ApiModelProperty(value = "Easy managed switch enable status. The default value is false")


  public Boolean getSupportESEnable() {
    return supportESEnable;
  }

  public void setSupportESEnable(Boolean supportESEnable) {
    this.supportESEnable = supportESEnable;
  }


  @Override
  public boolean equals(Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    LanProfileOpenApiVo lanProfileOpenApiVo = (LanProfileOpenApiVo) o;
    return Objects.equals(this.id, lanProfileOpenApiVo.id) &&
        Objects.equals(this.flag, lanProfileOpenApiVo.flag) &&
        Objects.equals(this.name, lanProfileOpenApiVo.name) &&
        Objects.equals(this.poe, lanProfileOpenApiVo.poe) &&
        Objects.equals(this.nativeNetworkId, lanProfileOpenApiVo.nativeNetworkId) &&
        Objects.equals(this.tagNetworkIds, lanProfileOpenApiVo.tagNetworkIds) &&
        Objects.equals(this.untagNetworkIds, lanProfileOpenApiVo.untagNetworkIds) &&
        Objects.equals(this.voiceNetworkId, lanProfileOpenApiVo.voiceNetworkId) &&
        Objects.equals(this.dot1x, lanProfileOpenApiVo.dot1x) &&
        Objects.equals(this.portIsolationEnable, lanProfileOpenApiVo.portIsolationEnable) &&
        Objects.equals(this.lldpMedEnable, lanProfileOpenApiVo.lldpMedEnable) &&
        Objects.equals(this.topoNotifyEnable, lanProfileOpenApiVo.topoNotifyEnable) &&
        Objects.equals(this.bandWidthCtrlType, lanProfileOpenApiVo.bandWidthCtrlType) &&
        Objects.equals(this.stormCtrl, lanProfileOpenApiVo.stormCtrl) &&
        Objects.equals(this.bandCtrl, lanProfileOpenApiVo.bandCtrl) &&
        Objects.equals(this.spanningTreeEnable, lanProfileOpenApiVo.spanningTreeEnable) &&
        Objects.equals(this.loopbackDetectEnable, lanProfileOpenApiVo.loopbackDetectEnable) &&
        Objects.equals(this.eeeEnable, lanProfileOpenApiVo.eeeEnable) &&
        Objects.equals(this.flowControlEnable, lanProfileOpenApiVo.flowControlEnable) &&
        Objects.equals(this.loopbackDetectVlanBasedEnable, lanProfileOpenApiVo.loopbackDetectVlanBasedEnable) &&
        Objects.equals(this.dhcpL2RelaySettings, lanProfileOpenApiVo.dhcpL2RelaySettings) &&
        Objects.equals(this.type, lanProfileOpenApiVo.type) &&
        Objects.equals(this.supportESEnable, lanProfileOpenApiVo.supportESEnable);
  }

  @Override
  public int hashCode() {
    return Objects.hash(id, flag, name, poe, nativeNetworkId, tagNetworkIds, untagNetworkIds, voiceNetworkId, dot1x, portIsolationEnable, lldpMedEnable, topoNotifyEnable, bandWidthCtrlType, stormCtrl, bandCtrl, spanningTreeEnable, loopbackDetectEnable, eeeEnable, flowControlEnable, loopbackDetectVlanBasedEnable, dhcpL2RelaySettings, type, supportESEnable);
  }

  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class LanProfileOpenApiVo {\n");
    
    sb.append("    id: ").append(toIndentedString(id)).append("\n");
    sb.append("    flag: ").append(toIndentedString(flag)).append("\n");
    sb.append("    name: ").append(toIndentedString(name)).append("\n");
    sb.append("    poe: ").append(toIndentedString(poe)).append("\n");
    sb.append("    nativeNetworkId: ").append(toIndentedString(nativeNetworkId)).append("\n");
    sb.append("    tagNetworkIds: ").append(toIndentedString(tagNetworkIds)).append("\n");
    sb.append("    untagNetworkIds: ").append(toIndentedString(untagNetworkIds)).append("\n");
    sb.append("    voiceNetworkId: ").append(toIndentedString(voiceNetworkId)).append("\n");
    sb.append("    dot1x: ").append(toIndentedString(dot1x)).append("\n");
    sb.append("    portIsolationEnable: ").append(toIndentedString(portIsolationEnable)).append("\n");
    sb.append("    lldpMedEnable: ").append(toIndentedString(lldpMedEnable)).append("\n");
    sb.append("    topoNotifyEnable: ").append(toIndentedString(topoNotifyEnable)).append("\n");
    sb.append("    bandWidthCtrlType: ").append(toIndentedString(bandWidthCtrlType)).append("\n");
    sb.append("    stormCtrl: ").append(toIndentedString(stormCtrl)).append("\n");
    sb.append("    bandCtrl: ").append(toIndentedString(bandCtrl)).append("\n");
    sb.append("    spanningTreeEnable: ").append(toIndentedString(spanningTreeEnable)).append("\n");
    sb.append("    loopbackDetectEnable: ").append(toIndentedString(loopbackDetectEnable)).append("\n");
    sb.append("    eeeEnable: ").append(toIndentedString(eeeEnable)).append("\n");
    sb.append("    flowControlEnable: ").append(toIndentedString(flowControlEnable)).append("\n");
    sb.append("    loopbackDetectVlanBasedEnable: ").append(toIndentedString(loopbackDetectVlanBasedEnable)).append("\n");
    sb.append("    dhcpL2RelaySettings: ").append(toIndentedString(dhcpL2RelaySettings)).append("\n");
    sb.append("    type: ").append(toIndentedString(type)).append("\n");
    sb.append("    supportESEnable: ").append(toIndentedString(supportESEnable)).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    ");
  }
}

