/*
 * Kubernetes
 * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
 *
 * The version of the OpenAPI document: v1.21.1
 *
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */


package io.kubernetes.autoscaling.models;

import java.util.Objects;
import com.google.gson.annotations.SerializedName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.HashMap;
import java.util.Map;

/**
 * RecommendedContainerResources is the recommendation of resources computed by autoscaler for a specific container. Respects the container resource policy if present in the spec. In particular the recommendation is not produced for containers with &#x60;ContainerScalingMode&#x60; set to &#39;Off&#39;.
 */
@ApiModel(description = "RecommendedContainerResources is the recommendation of resources computed by autoscaler for a specific container. Respects the container resource policy if present in the spec. In particular the recommendation is not produced for containers with `ContainerScalingMode` set to 'Off'.")
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2022-10-02T17:31:04.907Z[Etc/UTC]")
public class V1beta2VerticalPodAutoscalerStatusRecommendationContainerRecommendations {
  public static final String SERIALIZED_NAME_CONTAINER_NAME = "containerName";
  @SerializedName(SERIALIZED_NAME_CONTAINER_NAME)
  private String containerName;

  public static final String SERIALIZED_NAME_LOWER_BOUND = "lowerBound";
  @SerializedName(SERIALIZED_NAME_LOWER_BOUND)
  private Map<String, Object> lowerBound = null;

  public static final String SERIALIZED_NAME_TARGET = "target";
  @SerializedName(SERIALIZED_NAME_TARGET)
  private Map<String, Object> target = new HashMap<>();

  public static final String SERIALIZED_NAME_UNCAPPED_TARGET = "uncappedTarget";
  @SerializedName(SERIALIZED_NAME_UNCAPPED_TARGET)
  private Map<String, Object> uncappedTarget = null;

  public static final String SERIALIZED_NAME_UPPER_BOUND = "upperBound";
  @SerializedName(SERIALIZED_NAME_UPPER_BOUND)
  private Map<String, Object> upperBound = null;


  public V1beta2VerticalPodAutoscalerStatusRecommendationContainerRecommendations containerName(String containerName) {

    this.containerName = containerName;
    return this;
  }

   /**
   * Name of the container.
   * @return containerName
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "Name of the container.")

  public String getContainerName() {
    return containerName;
  }


  public void setContainerName(String containerName) {
    this.containerName = containerName;
  }


  public V1beta2VerticalPodAutoscalerStatusRecommendationContainerRecommendations lowerBound(Map<String, Object> lowerBound) {

    this.lowerBound = lowerBound;
    return this;
  }

  public V1beta2VerticalPodAutoscalerStatusRecommendationContainerRecommendations putLowerBoundItem(String key, Object lowerBoundItem) {
    if (this.lowerBound == null) {
      this.lowerBound = new HashMap<>();
    }
    this.lowerBound.put(key, lowerBoundItem);
    return this;
  }

   /**
   * Minimum recommended amount of resources. Observes ContainerResourcePolicy. This amount is not guaranteed to be sufficient for the application to operate in a stable way, however running with less resources is likely to have significant impact on performance/availability.
   * @return lowerBound
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "Minimum recommended amount of resources. Observes ContainerResourcePolicy. This amount is not guaranteed to be sufficient for the application to operate in a stable way, however running with less resources is likely to have significant impact on performance/availability.")

  public Map<String, Object> getLowerBound() {
    return lowerBound;
  }


  public void setLowerBound(Map<String, Object> lowerBound) {
    this.lowerBound = lowerBound;
  }


  public V1beta2VerticalPodAutoscalerStatusRecommendationContainerRecommendations target(Map<String, Object> target) {

    this.target = target;
    return this;
  }

  public V1beta2VerticalPodAutoscalerStatusRecommendationContainerRecommendations putTargetItem(String key, Object targetItem) {
    this.target.put(key, targetItem);
    return this;
  }

   /**
   * Recommended amount of resources. Observes ContainerResourcePolicy.
   * @return target
  **/
  @ApiModelProperty(required = true, value = "Recommended amount of resources. Observes ContainerResourcePolicy.")

  public Map<String, Object> getTarget() {
    return target;
  }


  public void setTarget(Map<String, Object> target) {
    this.target = target;
  }


  public V1beta2VerticalPodAutoscalerStatusRecommendationContainerRecommendations uncappedTarget(Map<String, Object> uncappedTarget) {

    this.uncappedTarget = uncappedTarget;
    return this;
  }

  public V1beta2VerticalPodAutoscalerStatusRecommendationContainerRecommendations putUncappedTargetItem(String key, Object uncappedTargetItem) {
    if (this.uncappedTarget == null) {
      this.uncappedTarget = new HashMap<>();
    }
    this.uncappedTarget.put(key, uncappedTargetItem);
    return this;
  }

   /**
   * The most recent recommended resources target computed by the autoscaler for the controlled pods, based only on actual resource usage, not taking into account the ContainerResourcePolicy. May differ from the Recommendation if the actual resource usage causes the target to violate the ContainerResourcePolicy (lower than MinAllowed or higher that MaxAllowed). Used only as status indication, will not affect actual resource assignment.
   * @return uncappedTarget
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "The most recent recommended resources target computed by the autoscaler for the controlled pods, based only on actual resource usage, not taking into account the ContainerResourcePolicy. May differ from the Recommendation if the actual resource usage causes the target to violate the ContainerResourcePolicy (lower than MinAllowed or higher that MaxAllowed). Used only as status indication, will not affect actual resource assignment.")

  public Map<String, Object> getUncappedTarget() {
    return uncappedTarget;
  }


  public void setUncappedTarget(Map<String, Object> uncappedTarget) {
    this.uncappedTarget = uncappedTarget;
  }


  public V1beta2VerticalPodAutoscalerStatusRecommendationContainerRecommendations upperBound(Map<String, Object> upperBound) {

    this.upperBound = upperBound;
    return this;
  }

  public V1beta2VerticalPodAutoscalerStatusRecommendationContainerRecommendations putUpperBoundItem(String key, Object upperBoundItem) {
    if (this.upperBound == null) {
      this.upperBound = new HashMap<>();
    }
    this.upperBound.put(key, upperBoundItem);
    return this;
  }

   /**
   * Maximum recommended amount of resources. Observes ContainerResourcePolicy. Any resources allocated beyond this value are likely wasted. This value may be larger than the maximum amount of application is actually capable of consuming.
   * @return upperBound
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "Maximum recommended amount of resources. Observes ContainerResourcePolicy. Any resources allocated beyond this value are likely wasted. This value may be larger than the maximum amount of application is actually capable of consuming.")

  public Map<String, Object> getUpperBound() {
    return upperBound;
  }


  public void setUpperBound(Map<String, Object> upperBound) {
    this.upperBound = upperBound;
  }


  @Override
  public boolean equals(Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    V1beta2VerticalPodAutoscalerStatusRecommendationContainerRecommendations v1beta2VerticalPodAutoscalerStatusRecommendationContainerRecommendations = (V1beta2VerticalPodAutoscalerStatusRecommendationContainerRecommendations) o;
    return Objects.equals(this.containerName, v1beta2VerticalPodAutoscalerStatusRecommendationContainerRecommendations.containerName) &&
        Objects.equals(this.lowerBound, v1beta2VerticalPodAutoscalerStatusRecommendationContainerRecommendations.lowerBound) &&
        Objects.equals(this.target, v1beta2VerticalPodAutoscalerStatusRecommendationContainerRecommendations.target) &&
        Objects.equals(this.uncappedTarget, v1beta2VerticalPodAutoscalerStatusRecommendationContainerRecommendations.uncappedTarget) &&
        Objects.equals(this.upperBound, v1beta2VerticalPodAutoscalerStatusRecommendationContainerRecommendations.upperBound);
  }

  @Override
  public int hashCode() {
    return Objects.hash(containerName, lowerBound, target, uncappedTarget, upperBound);
  }


  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class V1beta2VerticalPodAutoscalerStatusRecommendationContainerRecommendations {\n");
    sb.append("    containerName: ").append(toIndentedString(containerName)).append("\n");
    sb.append("    lowerBound: ").append(toIndentedString(lowerBound)).append("\n");
    sb.append("    target: ").append(toIndentedString(target)).append("\n");
    sb.append("    uncappedTarget: ").append(toIndentedString(uncappedTarget)).append("\n");
    sb.append("    upperBound: ").append(toIndentedString(upperBound)).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    ");
  }

}

