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

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

import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.Objects;

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

public class LanNetworkIpv6Config   {
  @JsonProperty("proto")
  private Integer proto;

  @JsonProperty("enable")
  private Integer enable;

  @JsonProperty("dhcpv6")
  private Dhcpv6Setting dhcpv6;

  @JsonProperty("slaac")
  private LanNetworkProtoSlaacStatelessDhcpModeOrSlaacRdnssMode slaac;

  @JsonProperty("rdnss")
  private LanNetworkProtoSlaacStatelessDhcpModeOrSlaacRdnssMode rdnss;

  @JsonProperty("passthrough")
  private LanNetworkProtoPassThroughMode passthrough;

  @JsonProperty("ra")
  private RaSetting ra;

  public LanNetworkIpv6Config proto(Integer proto) {
    this.proto = proto;
    return this;
  }

  /**
   * The IPv6 Connection Type of LAN port. Proto should be a value as follows:  0: \"none\" (Default); 1: \"DHCPv6\"; 2: \"SLAAC+Stateless DHCP\"; 3: \"SLAAC+RDNSS\"; 4: \"passthrough\"
   * @return proto
  */
  @ApiModelProperty(required = true, value = "The IPv6 Connection Type of LAN port. Proto should be a value as follows:  0: \"none\" (Default); 1: \"DHCPv6\"; 2: \"SLAAC+Stateless DHCP\"; 3: \"SLAAC+RDNSS\"; 4: \"passthrough\"")
  @NotNull


  public Integer getProto() {
    return proto;
  }

  public void setProto(Integer proto) {
    this.proto = proto;
  }

  public LanNetworkIpv6Config enable(Integer enable) {
    this.enable = enable;
    return this;
  }

  /**
   * IPv6 enable should be a value as follows: 0: Disable (Default); 1: Enable
   * @return enable
  */
  @ApiModelProperty(required = true, value = "IPv6 enable should be a value as follows: 0: Disable (Default); 1: Enable")
  @NotNull


  public Integer getEnable() {
    return enable;
  }

  public void setEnable(Integer enable) {
    this.enable = enable;
  }

  public LanNetworkIpv6Config dhcpv6(Dhcpv6Setting dhcpv6) {
    this.dhcpv6 = dhcpv6;
    return this;
  }

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

  @Valid

  public Dhcpv6Setting getDhcpv6() {
    return dhcpv6;
  }

  public void setDhcpv6(Dhcpv6Setting dhcpv6) {
    this.dhcpv6 = dhcpv6;
  }

  public LanNetworkIpv6Config slaac(LanNetworkProtoSlaacStatelessDhcpModeOrSlaacRdnssMode slaac) {
    this.slaac = slaac;
    return this;
  }

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

  @Valid

  public LanNetworkProtoSlaacStatelessDhcpModeOrSlaacRdnssMode getSlaac() {
    return slaac;
  }

  public void setSlaac(LanNetworkProtoSlaacStatelessDhcpModeOrSlaacRdnssMode slaac) {
    this.slaac = slaac;
  }

  public LanNetworkIpv6Config rdnss(LanNetworkProtoSlaacStatelessDhcpModeOrSlaacRdnssMode rdnss) {
    this.rdnss = rdnss;
    return this;
  }

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

  @Valid

  public LanNetworkProtoSlaacStatelessDhcpModeOrSlaacRdnssMode getRdnss() {
    return rdnss;
  }

  public void setRdnss(LanNetworkProtoSlaacStatelessDhcpModeOrSlaacRdnssMode rdnss) {
    this.rdnss = rdnss;
  }

  public LanNetworkIpv6Config passthrough(LanNetworkProtoPassThroughMode passthrough) {
    this.passthrough = passthrough;
    return this;
  }

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

  @Valid

  public LanNetworkProtoPassThroughMode getPassthrough() {
    return passthrough;
  }

  public void setPassthrough(LanNetworkProtoPassThroughMode passthrough) {
    this.passthrough = passthrough;
  }

  public LanNetworkIpv6Config ra(RaSetting ra) {
    this.ra = ra;
    return this;
  }

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

  @Valid

  public RaSetting getRa() {
    return ra;
  }

  public void setRa(RaSetting ra) {
    this.ra = ra;
  }


  @Override
  public boolean equals(Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    LanNetworkIpv6Config lanNetworkIpv6Config = (LanNetworkIpv6Config) o;
    return Objects.equals(this.proto, lanNetworkIpv6Config.proto) &&
        Objects.equals(this.enable, lanNetworkIpv6Config.enable) &&
        Objects.equals(this.dhcpv6, lanNetworkIpv6Config.dhcpv6) &&
        Objects.equals(this.slaac, lanNetworkIpv6Config.slaac) &&
        Objects.equals(this.rdnss, lanNetworkIpv6Config.rdnss) &&
        Objects.equals(this.passthrough, lanNetworkIpv6Config.passthrough) &&
        Objects.equals(this.ra, lanNetworkIpv6Config.ra);
  }

  @Override
  public int hashCode() {
    return Objects.hash(proto, enable, dhcpv6, slaac, rdnss, passthrough, ra);
  }

  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class LanNetworkIpv6Config {\n");
    
    sb.append("    proto: ").append(toIndentedString(proto)).append("\n");
    sb.append("    enable: ").append(toIndentedString(enable)).append("\n");
    sb.append("    dhcpv6: ").append(toIndentedString(dhcpv6)).append("\n");
    sb.append("    slaac: ").append(toIndentedString(slaac)).append("\n");
    sb.append("    rdnss: ").append(toIndentedString(rdnss)).append("\n");
    sb.append("    passthrough: ").append(toIndentedString(passthrough)).append("\n");
    sb.append("    ra: ").append(toIndentedString(ra)).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    ");
  }
}

