/*
 * Selling Partner API for Merchant Fulfillment
 * The Selling Partner API for Merchant Fulfillment helps you build applications that let sellers purchase shipping for non-Prime and Prime orders using Amazon’s Buy Shipping Services.
 *
 * OpenAPI spec version: v0
 * 
 *
 * NOTE: This class is auto generated by the swagger code generator program.
 * https://github.com/swagger-api/swagger-codegen.git
 * Do not edit the class manually.
 */


package io.swagger.client.model.mfn;

import java.util.Objects;

import com.google.gson.annotations.SerializedName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

/**
 * A shipping service offer made by a carrier.
 */
@ApiModel(description = "A shipping service offer made by a carrier.")
@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaClientCodegen", date = "2023-11-14T15:09:37.314+01:00")
public class ShippingService {
  @SerializedName("ShippingServiceName")
  private String shippingServiceName = null;

  @SerializedName("CarrierName")
  private String carrierName = null;

  @SerializedName("ShippingServiceId")
  private String shippingServiceId = null;

  @SerializedName("ShippingServiceOfferId")
  private String shippingServiceOfferId = null;

  @SerializedName("ShipDate")
  private String shipDate = null;

  @SerializedName("EarliestEstimatedDeliveryDate")
  private String earliestEstimatedDeliveryDate = null;

  @SerializedName("LatestEstimatedDeliveryDate")
  private String latestEstimatedDeliveryDate = null;

  @SerializedName("Rate")
  private CurrencyAmount rate = null;

  @SerializedName("ShippingServiceOptions")
  private ShippingServiceOptions shippingServiceOptions = null;

  @SerializedName("AvailableShippingServiceOptions")
  private AvailableShippingServiceOptions availableShippingServiceOptions = null;

  @SerializedName("AvailableLabelFormats")
  private LabelFormatList availableLabelFormats = null;

  @SerializedName("AvailableFormatOptionsForLabel")
  private AvailableFormatOptionsForLabelList availableFormatOptionsForLabel = null;

  @SerializedName("RequiresAdditionalSellerInputs")
  private Boolean requiresAdditionalSellerInputs = null;

  public ShippingService shippingServiceName(String shippingServiceName) {
    this.shippingServiceName = shippingServiceName;
    return this;
  }

   /**
   * A plain text representation of a carrier&#39;s shipping service. For example, \&quot;UPS Ground\&quot; or \&quot;FedEx Standard Overnight\&quot;. 
   * @return shippingServiceName
  **/
  @ApiModelProperty(required = true, value = "A plain text representation of a carrier's shipping service. For example, \"UPS Ground\" or \"FedEx Standard Overnight\". ")
  public String getShippingServiceName() {
    return shippingServiceName;
  }

  public void setShippingServiceName(String shippingServiceName) {
    this.shippingServiceName = shippingServiceName;
  }

  public ShippingService carrierName(String carrierName) {
    this.carrierName = carrierName;
    return this;
  }

   /**
   * The name of the carrier.
   * @return carrierName
  **/
  @ApiModelProperty(required = true, value = "The name of the carrier.")
  public String getCarrierName() {
    return carrierName;
  }

  public void setCarrierName(String carrierName) {
    this.carrierName = carrierName;
  }

  public ShippingService shippingServiceId(String shippingServiceId) {
    this.shippingServiceId = shippingServiceId;
    return this;
  }

   /**
   * Get shippingServiceId
   * @return shippingServiceId
  **/
  @ApiModelProperty(required = true, value = "")
  public String getShippingServiceId() {
    return shippingServiceId;
  }

  public void setShippingServiceId(String shippingServiceId) {
    this.shippingServiceId = shippingServiceId;
  }

  public ShippingService shippingServiceOfferId(String shippingServiceOfferId) {
    this.shippingServiceOfferId = shippingServiceOfferId;
    return this;
  }

   /**
   * An Amazon-defined shipping service offer identifier.
   * @return shippingServiceOfferId
  **/
  @ApiModelProperty(required = true, value = "An Amazon-defined shipping service offer identifier.")
  public String getShippingServiceOfferId() {
    return shippingServiceOfferId;
  }

  public void setShippingServiceOfferId(String shippingServiceOfferId) {
    this.shippingServiceOfferId = shippingServiceOfferId;
  }

  public ShippingService shipDate(String shipDate) {
    this.shipDate = shipDate;
    return this;
  }

   /**
   * The date that the carrier will ship the package.
   * @return shipDate
  **/
  @ApiModelProperty(required = true, value = "The date that the carrier will ship the package.")
  public String getShipDate() {
    return shipDate;
  }

  public void setShipDate(String shipDate) {
    this.shipDate = shipDate;
  }

  public ShippingService earliestEstimatedDeliveryDate(String earliestEstimatedDeliveryDate) {
    this.earliestEstimatedDeliveryDate = earliestEstimatedDeliveryDate;
    return this;
  }

   /**
   * The earliest date by which the shipment will be delivered.
   * @return earliestEstimatedDeliveryDate
  **/
  @ApiModelProperty(value = "The earliest date by which the shipment will be delivered.")
  public String getEarliestEstimatedDeliveryDate() {
    return earliestEstimatedDeliveryDate;
  }

  public void setEarliestEstimatedDeliveryDate(String earliestEstimatedDeliveryDate) {
    this.earliestEstimatedDeliveryDate = earliestEstimatedDeliveryDate;
  }

  public ShippingService latestEstimatedDeliveryDate(String latestEstimatedDeliveryDate) {
    this.latestEstimatedDeliveryDate = latestEstimatedDeliveryDate;
    return this;
  }

   /**
   * The latest date by which the shipment will be delivered.
   * @return latestEstimatedDeliveryDate
  **/
  @ApiModelProperty(value = "The latest date by which the shipment will be delivered.")
  public String getLatestEstimatedDeliveryDate() {
    return latestEstimatedDeliveryDate;
  }

  public void setLatestEstimatedDeliveryDate(String latestEstimatedDeliveryDate) {
    this.latestEstimatedDeliveryDate = latestEstimatedDeliveryDate;
  }

  public ShippingService rate(CurrencyAmount rate) {
    this.rate = rate;
    return this;
  }

   /**
   * The amount that the carrier will charge for the shipment.
   * @return rate
  **/
  @ApiModelProperty(required = true, value = "The amount that the carrier will charge for the shipment.")
  public CurrencyAmount getRate() {
    return rate;
  }

  public void setRate(CurrencyAmount rate) {
    this.rate = rate;
  }

  public ShippingService shippingServiceOptions(ShippingServiceOptions shippingServiceOptions) {
    this.shippingServiceOptions = shippingServiceOptions;
    return this;
  }

   /**
   * Extra services offered by the carrier.
   * @return shippingServiceOptions
  **/
  @ApiModelProperty(required = true, value = "Extra services offered by the carrier.")
  public ShippingServiceOptions getShippingServiceOptions() {
    return shippingServiceOptions;
  }

  public void setShippingServiceOptions(ShippingServiceOptions shippingServiceOptions) {
    this.shippingServiceOptions = shippingServiceOptions;
  }

  public ShippingService availableShippingServiceOptions(AvailableShippingServiceOptions availableShippingServiceOptions) {
    this.availableShippingServiceOptions = availableShippingServiceOptions;
    return this;
  }

   /**
   * Get availableShippingServiceOptions
   * @return availableShippingServiceOptions
  **/
  @ApiModelProperty(value = "")
  public AvailableShippingServiceOptions getAvailableShippingServiceOptions() {
    return availableShippingServiceOptions;
  }

  public void setAvailableShippingServiceOptions(AvailableShippingServiceOptions availableShippingServiceOptions) {
    this.availableShippingServiceOptions = availableShippingServiceOptions;
  }

  public ShippingService availableLabelFormats(LabelFormatList availableLabelFormats) {
    this.availableLabelFormats = availableLabelFormats;
    return this;
  }

   /**
   * Get availableLabelFormats
   * @return availableLabelFormats
  **/
  @ApiModelProperty(value = "")
  public LabelFormatList getAvailableLabelFormats() {
    return availableLabelFormats;
  }

  public void setAvailableLabelFormats(LabelFormatList availableLabelFormats) {
    this.availableLabelFormats = availableLabelFormats;
  }

  public ShippingService availableFormatOptionsForLabel(AvailableFormatOptionsForLabelList availableFormatOptionsForLabel) {
    this.availableFormatOptionsForLabel = availableFormatOptionsForLabel;
    return this;
  }

   /**
   * Get availableFormatOptionsForLabel
   * @return availableFormatOptionsForLabel
  **/
  @ApiModelProperty(value = "")
  public AvailableFormatOptionsForLabelList getAvailableFormatOptionsForLabel() {
    return availableFormatOptionsForLabel;
  }

  public void setAvailableFormatOptionsForLabel(AvailableFormatOptionsForLabelList availableFormatOptionsForLabel) {
    this.availableFormatOptionsForLabel = availableFormatOptionsForLabel;
  }

  public ShippingService requiresAdditionalSellerInputs(Boolean requiresAdditionalSellerInputs) {
    this.requiresAdditionalSellerInputs = requiresAdditionalSellerInputs;
    return this;
  }

   /**
   * When true, additional seller inputs are required.
   * @return requiresAdditionalSellerInputs
  **/
  @ApiModelProperty(required = true, value = "When true, additional seller inputs are required.")
  public Boolean isRequiresAdditionalSellerInputs() {
    return requiresAdditionalSellerInputs;
  }

  public void setRequiresAdditionalSellerInputs(Boolean requiresAdditionalSellerInputs) {
    this.requiresAdditionalSellerInputs = requiresAdditionalSellerInputs;
  }


  @Override
  public boolean equals(java.lang.Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    ShippingService shippingService = (ShippingService) o;
    return Objects.equals(this.shippingServiceName, shippingService.shippingServiceName) &&
        Objects.equals(this.carrierName, shippingService.carrierName) &&
        Objects.equals(this.shippingServiceId, shippingService.shippingServiceId) &&
        Objects.equals(this.shippingServiceOfferId, shippingService.shippingServiceOfferId) &&
        Objects.equals(this.shipDate, shippingService.shipDate) &&
        Objects.equals(this.earliestEstimatedDeliveryDate, shippingService.earliestEstimatedDeliveryDate) &&
        Objects.equals(this.latestEstimatedDeliveryDate, shippingService.latestEstimatedDeliveryDate) &&
        Objects.equals(this.rate, shippingService.rate) &&
        Objects.equals(this.shippingServiceOptions, shippingService.shippingServiceOptions) &&
        Objects.equals(this.availableShippingServiceOptions, shippingService.availableShippingServiceOptions) &&
        Objects.equals(this.availableLabelFormats, shippingService.availableLabelFormats) &&
        Objects.equals(this.availableFormatOptionsForLabel, shippingService.availableFormatOptionsForLabel) &&
        Objects.equals(this.requiresAdditionalSellerInputs, shippingService.requiresAdditionalSellerInputs);
  }

  @Override
  public int hashCode() {
    return Objects.hash(shippingServiceName, carrierName, shippingServiceId, shippingServiceOfferId, shipDate, earliestEstimatedDeliveryDate, latestEstimatedDeliveryDate, rate, shippingServiceOptions, availableShippingServiceOptions, availableLabelFormats, availableFormatOptionsForLabel, requiresAdditionalSellerInputs);
  }


  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class ShippingService {\n");
    
    sb.append("    shippingServiceName: ").append(toIndentedString(shippingServiceName)).append("\n");
    sb.append("    carrierName: ").append(toIndentedString(carrierName)).append("\n");
    sb.append("    shippingServiceId: ").append(toIndentedString(shippingServiceId)).append("\n");
    sb.append("    shippingServiceOfferId: ").append(toIndentedString(shippingServiceOfferId)).append("\n");
    sb.append("    shipDate: ").append(toIndentedString(shipDate)).append("\n");
    sb.append("    earliestEstimatedDeliveryDate: ").append(toIndentedString(earliestEstimatedDeliveryDate)).append("\n");
    sb.append("    latestEstimatedDeliveryDate: ").append(toIndentedString(latestEstimatedDeliveryDate)).append("\n");
    sb.append("    rate: ").append(toIndentedString(rate)).append("\n");
    sb.append("    shippingServiceOptions: ").append(toIndentedString(shippingServiceOptions)).append("\n");
    sb.append("    availableShippingServiceOptions: ").append(toIndentedString(availableShippingServiceOptions)).append("\n");
    sb.append("    availableLabelFormats: ").append(toIndentedString(availableLabelFormats)).append("\n");
    sb.append("    availableFormatOptionsForLabel: ").append(toIndentedString(availableFormatOptionsForLabel)).append("\n");
    sb.append("    requiresAdditionalSellerInputs: ").append(toIndentedString(requiresAdditionalSellerInputs)).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(java.lang.Object o) {
    if (o == null) {
      return "null";
    }
    return o.toString().replace("\n", "\n    ");
  }

}

