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

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

public class LteWanPortSettingOpenApiVo   {
  @JsonProperty("portId")
  private String portId;

  @JsonProperty("portDescription")
  private String portDescription;

  @JsonProperty("portName")
  private String portName;

  @JsonProperty("cardStatus")
  private Integer cardStatus;

  @JsonProperty("mobileData")
  private Boolean mobileData;

  @JsonProperty("dataRoaming")
  private Boolean dataRoaming;

  @JsonProperty("networkMode")
  private Integer networkMode;

  @JsonProperty("bandMode")
  private Integer bandMode;

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

  @JsonProperty("dialupSetting")
  private DialupSettingOpenApiVo dialupSetting;

  @JsonProperty("supportNetworkMode")
  @Valid
  private List<Integer> supportNetworkMode = null;

  public LteWanPortSettingOpenApiVo portId(String portId) {
    this.portId = portId;
    return this;
  }

  /**
   * Port ID
   * @return portId
  */
  @ApiModelProperty(required = true, value = "Port ID")
  @NotNull


  public String getPortId() {
    return portId;
  }

  public void setPortId(String portId) {
    this.portId = portId;
  }

  public LteWanPortSettingOpenApiVo portDescription(String portDescription) {
    this.portDescription = portDescription;
    return this;
  }

  /**
   * Port description
   * @return portDescription
  */
  @ApiModelProperty(value = "Port description")


  public String getPortDescription() {
    return portDescription;
  }

  public void setPortDescription(String portDescription) {
    this.portDescription = portDescription;
  }

  public LteWanPortSettingOpenApiVo portName(String portName) {
    this.portName = portName;
    return this;
  }

  /**
   * Port name
   * @return portName
  */
  @ApiModelProperty(value = "Port name")


  public String getPortName() {
    return portName;
  }

  public void setPortName(String portName) {
    this.portName = portName;
  }

  public LteWanPortSettingOpenApiVo cardStatus(Integer cardStatus) {
    this.cardStatus = cardStatus;
    return this;
  }

  /**
   * cardStatus: 0:no_sim, 1:unknown, 2:pin_lock, 3:pin_verified, 4:ready, 5:puk_lock, 6:blocked
   * @return cardStatus
  */
  @ApiModelProperty(value = "cardStatus: 0:no_sim, 1:unknown, 2:pin_lock, 3:pin_verified, 4:ready, 5:puk_lock, 6:blocked")


  public Integer getCardStatus() {
    return cardStatus;
  }

  public void setCardStatus(Integer cardStatus) {
    this.cardStatus = cardStatus;
  }

  public LteWanPortSettingOpenApiVo mobileData(Boolean mobileData) {
    this.mobileData = mobileData;
    return this;
  }

  /**
   * mobile data
   * @return mobileData
  */
  @ApiModelProperty(required = true, value = "mobile data")
  @NotNull


  public Boolean getMobileData() {
    return mobileData;
  }

  public void setMobileData(Boolean mobileData) {
    this.mobileData = mobileData;
  }

  public LteWanPortSettingOpenApiVo dataRoaming(Boolean dataRoaming) {
    this.dataRoaming = dataRoaming;
    return this;
  }

  /**
   * data roaming
   * @return dataRoaming
  */
  @ApiModelProperty(required = true, value = "data roaming")
  @NotNull


  public Boolean getDataRoaming() {
    return dataRoaming;
  }

  public void setDataRoaming(Boolean dataRoaming) {
    this.dataRoaming = dataRoaming;
  }

  public LteWanPortSettingOpenApiVo networkMode(Integer networkMode) {
    this.networkMode = networkMode;
    return this;
  }

  /**
   * networkMode: 0:3G Only, 1:4G Only, 2:4G Preferred
   * @return networkMode
  */
  @ApiModelProperty(required = true, value = "networkMode: 0:3G Only, 1:4G Only, 2:4G Preferred")
  @NotNull


  public Integer getNetworkMode() {
    return networkMode;
  }

  public void setNetworkMode(Integer networkMode) {
    this.networkMode = networkMode;
  }

  public LteWanPortSettingOpenApiVo bandMode(Integer bandMode) {
    this.bandMode = bandMode;
    return this;
  }

  /**
   * bandMode: 0:auto, 1:manual, only for networkMode 4g Only and 4G Preferred
   * @return bandMode
  */
  @ApiModelProperty(value = "bandMode: 0:auto, 1:manual, only for networkMode 4g Only and 4G Preferred")


  public Integer getBandMode() {
    return bandMode;
  }

  public void setBandMode(Integer bandMode) {
    this.bandMode = bandMode;
  }

  public LteWanPortSettingOpenApiVo bands(List<String> bands) {
    this.bands = bands;
    return this;
  }

  public LteWanPortSettingOpenApiVo addBandsItem(String bandsItem) {
    if (this.bands == null) {
      this.bands = new ArrayList<>();
    }
    this.bands.add(bandsItem);
    return this;
  }

  /**
   * Only for band mode manual
   * @return bands
  */
  @ApiModelProperty(value = "Only for band mode manual")


  public List<String> getBands() {
    return bands;
  }

  public void setBands(List<String> bands) {
    this.bands = bands;
  }

  public LteWanPortSettingOpenApiVo dialupSetting(DialupSettingOpenApiVo dialupSetting) {
    this.dialupSetting = dialupSetting;
    return this;
  }

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

  @Valid

  public DialupSettingOpenApiVo getDialupSetting() {
    return dialupSetting;
  }

  public void setDialupSetting(DialupSettingOpenApiVo dialupSetting) {
    this.dialupSetting = dialupSetting;
  }

  public LteWanPortSettingOpenApiVo supportNetworkMode(List<Integer> supportNetworkMode) {
    this.supportNetworkMode = supportNetworkMode;
    return this;
  }

  public LteWanPortSettingOpenApiVo addSupportNetworkModeItem(Integer supportNetworkModeItem) {
    if (this.supportNetworkMode == null) {
      this.supportNetworkMode = new ArrayList<>();
    }
    this.supportNetworkMode.add(supportNetworkModeItem);
    return this;
  }

  /**
   * The network mode that the device can select.
   * @return supportNetworkMode
  */
  @ApiModelProperty(value = "The network mode that the device can select.")


  public List<Integer> getSupportNetworkMode() {
    return supportNetworkMode;
  }

  public void setSupportNetworkMode(List<Integer> supportNetworkMode) {
    this.supportNetworkMode = supportNetworkMode;
  }


  @Override
  public boolean equals(Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    LteWanPortSettingOpenApiVo lteWanPortSettingOpenApiVo = (LteWanPortSettingOpenApiVo) o;
    return Objects.equals(this.portId, lteWanPortSettingOpenApiVo.portId) &&
        Objects.equals(this.portDescription, lteWanPortSettingOpenApiVo.portDescription) &&
        Objects.equals(this.portName, lteWanPortSettingOpenApiVo.portName) &&
        Objects.equals(this.cardStatus, lteWanPortSettingOpenApiVo.cardStatus) &&
        Objects.equals(this.mobileData, lteWanPortSettingOpenApiVo.mobileData) &&
        Objects.equals(this.dataRoaming, lteWanPortSettingOpenApiVo.dataRoaming) &&
        Objects.equals(this.networkMode, lteWanPortSettingOpenApiVo.networkMode) &&
        Objects.equals(this.bandMode, lteWanPortSettingOpenApiVo.bandMode) &&
        Objects.equals(this.bands, lteWanPortSettingOpenApiVo.bands) &&
        Objects.equals(this.dialupSetting, lteWanPortSettingOpenApiVo.dialupSetting) &&
        Objects.equals(this.supportNetworkMode, lteWanPortSettingOpenApiVo.supportNetworkMode);
  }

  @Override
  public int hashCode() {
    return Objects.hash(portId, portDescription, portName, cardStatus, mobileData, dataRoaming, networkMode, bandMode, bands, dialupSetting, supportNetworkMode);
  }

  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class LteWanPortSettingOpenApiVo {\n");
    
    sb.append("    portId: ").append(toIndentedString(portId)).append("\n");
    sb.append("    portDescription: ").append(toIndentedString(portDescription)).append("\n");
    sb.append("    portName: ").append(toIndentedString(portName)).append("\n");
    sb.append("    cardStatus: ").append(toIndentedString(cardStatus)).append("\n");
    sb.append("    mobileData: ").append(toIndentedString(mobileData)).append("\n");
    sb.append("    dataRoaming: ").append(toIndentedString(dataRoaming)).append("\n");
    sb.append("    networkMode: ").append(toIndentedString(networkMode)).append("\n");
    sb.append("    bandMode: ").append(toIndentedString(bandMode)).append("\n");
    sb.append("    bands: ").append(toIndentedString(bands)).append("\n");
    sb.append("    dialupSetting: ").append(toIndentedString(dialupSetting)).append("\n");
    sb.append("    supportNetworkMode: ").append(toIndentedString(supportNetworkMode)).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    ");
  }
}

