/*
 * 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;

/**
 * Shipment information required for requesting shipping service offers or for creating a shipment.
 */
@ApiModel(description = "Shipment information required for requesting shipping service offers or for creating a shipment.")
@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaClientCodegen", date = "2023-11-14T15:09:37.314+01:00")
public class ShipmentRequestDetails {
  @SerializedName("AmazonOrderId")
  private String amazonOrderId = null;

  @SerializedName("SellerOrderId")
  private String sellerOrderId = null;

  @SerializedName("ItemList")
  private ItemList itemList = null;

  @SerializedName("ShipFromAddress")
  private Address shipFromAddress = null;

  @SerializedName("PackageDimensions")
  private PackageDimensions packageDimensions = null;

  @SerializedName("Weight")
  private Weight weight = null;

  @SerializedName("MustArriveByDate")
  private String mustArriveByDate = null;

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

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

  @SerializedName("LabelCustomization")
  private LabelCustomization labelCustomization = null;

  public ShipmentRequestDetails amazonOrderId(String amazonOrderId) {
    this.amazonOrderId = amazonOrderId;
    return this;
  }

   /**
   * An Amazon-defined order identifier in 3-7-7 format.
   * @return amazonOrderId
  **/
  @ApiModelProperty(required = true, value = "An Amazon-defined order identifier in 3-7-7 format.")
  public String getAmazonOrderId() {
    return amazonOrderId;
  }

  public void setAmazonOrderId(String amazonOrderId) {
    this.amazonOrderId = amazonOrderId;
  }

  public ShipmentRequestDetails sellerOrderId(String sellerOrderId) {
    this.sellerOrderId = sellerOrderId;
    return this;
  }

   /**
   * A seller-defined order identifier.
   * @return sellerOrderId
  **/
  @ApiModelProperty(value = "A seller-defined order identifier.")
  public String getSellerOrderId() {
    return sellerOrderId;
  }

  public void setSellerOrderId(String sellerOrderId) {
    this.sellerOrderId = sellerOrderId;
  }

  public ShipmentRequestDetails itemList(ItemList itemList) {
    this.itemList = itemList;
    return this;
  }

   /**
   * Get itemList
   * @return itemList
  **/
  @ApiModelProperty(required = true, value = "")
  public ItemList getItemList() {
    return itemList;
  }

  public void setItemList(ItemList itemList) {
    this.itemList = itemList;
  }

  public ShipmentRequestDetails shipFromAddress(Address shipFromAddress) {
    this.shipFromAddress = shipFromAddress;
    return this;
  }

   /**
   * The address of the sender.
   * @return shipFromAddress
  **/
  @ApiModelProperty(required = true, value = "The address of the sender.")
  public Address getShipFromAddress() {
    return shipFromAddress;
  }

  public void setShipFromAddress(Address shipFromAddress) {
    this.shipFromAddress = shipFromAddress;
  }

  public ShipmentRequestDetails packageDimensions(PackageDimensions packageDimensions) {
    this.packageDimensions = packageDimensions;
    return this;
  }

   /**
   * The package dimensions.
   * @return packageDimensions
  **/
  @ApiModelProperty(required = true, value = "The package dimensions.")
  public PackageDimensions getPackageDimensions() {
    return packageDimensions;
  }

  public void setPackageDimensions(PackageDimensions packageDimensions) {
    this.packageDimensions = packageDimensions;
  }

  public ShipmentRequestDetails weight(Weight weight) {
    this.weight = weight;
    return this;
  }

   /**
   * The package weight.
   * @return weight
  **/
  @ApiModelProperty(required = true, value = "The package weight.")
  public Weight getWeight() {
    return weight;
  }

  public void setWeight(Weight weight) {
    this.weight = weight;
  }

  public ShipmentRequestDetails mustArriveByDate(String mustArriveByDate) {
    this.mustArriveByDate = mustArriveByDate;
    return this;
  }

   /**
   * The date by which the package must arrive to keep the promise to the customer, in ISO 8601 datetime format. If MustArriveByDate is specified, only shipping service offers that can be delivered by that date are returned.
   * @return mustArriveByDate
  **/
  @ApiModelProperty(value = "The date by which the package must arrive to keep the promise to the customer, in ISO 8601 datetime format. If MustArriveByDate is specified, only shipping service offers that can be delivered by that date are returned.")
  public String getMustArriveByDate() {
    return mustArriveByDate;
  }

  public void setMustArriveByDate(String mustArriveByDate) {
    this.mustArriveByDate = mustArriveByDate;
  }

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

   /**
   * When used in a request, this is the date and time that the seller wants to ship the package. When used in a response, this is the date and time that the package can be shipped by the indicated method.
   * @return shipDate
  **/
  @ApiModelProperty(value = "When used in a request, this is the date and time that the seller wants to ship the package. When used in a response, this is the date and time that the package can be shipped by the indicated method.")
  public String getShipDate() {
    return shipDate;
  }

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

  public ShipmentRequestDetails 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 ShipmentRequestDetails labelCustomization(LabelCustomization labelCustomization) {
    this.labelCustomization = labelCustomization;
    return this;
  }

   /**
   * Label customization options.
   * @return labelCustomization
  **/
  @ApiModelProperty(value = "Label customization options.")
  public LabelCustomization getLabelCustomization() {
    return labelCustomization;
  }

  public void setLabelCustomization(LabelCustomization labelCustomization) {
    this.labelCustomization = labelCustomization;
  }


  @Override
  public boolean equals(java.lang.Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    ShipmentRequestDetails shipmentRequestDetails = (ShipmentRequestDetails) o;
    return Objects.equals(this.amazonOrderId, shipmentRequestDetails.amazonOrderId) &&
        Objects.equals(this.sellerOrderId, shipmentRequestDetails.sellerOrderId) &&
        Objects.equals(this.itemList, shipmentRequestDetails.itemList) &&
        Objects.equals(this.shipFromAddress, shipmentRequestDetails.shipFromAddress) &&
        Objects.equals(this.packageDimensions, shipmentRequestDetails.packageDimensions) &&
        Objects.equals(this.weight, shipmentRequestDetails.weight) &&
        Objects.equals(this.mustArriveByDate, shipmentRequestDetails.mustArriveByDate) &&
        Objects.equals(this.shipDate, shipmentRequestDetails.shipDate) &&
        Objects.equals(this.shippingServiceOptions, shipmentRequestDetails.shippingServiceOptions) &&
        Objects.equals(this.labelCustomization, shipmentRequestDetails.labelCustomization);
  }

  @Override
  public int hashCode() {
    return Objects.hash(amazonOrderId, sellerOrderId, itemList, shipFromAddress, packageDimensions, weight, mustArriveByDate, shipDate, shippingServiceOptions, labelCustomization);
  }


  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class ShipmentRequestDetails {\n");
    
    sb.append("    amazonOrderId: ").append(toIndentedString(amazonOrderId)).append("\n");
    sb.append("    sellerOrderId: ").append(toIndentedString(sellerOrderId)).append("\n");
    sb.append("    itemList: ").append(toIndentedString(itemList)).append("\n");
    sb.append("    shipFromAddress: ").append(toIndentedString(shipFromAddress)).append("\n");
    sb.append("    packageDimensions: ").append(toIndentedString(packageDimensions)).append("\n");
    sb.append("    weight: ").append(toIndentedString(weight)).append("\n");
    sb.append("    mustArriveByDate: ").append(toIndentedString(mustArriveByDate)).append("\n");
    sb.append("    shipDate: ").append(toIndentedString(shipDate)).append("\n");
    sb.append("    shippingServiceOptions: ").append(toIndentedString(shippingServiceOptions)).append("\n");
    sb.append("    labelCustomization: ").append(toIndentedString(labelCustomization)).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    ");
  }

}

