/*
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 */
/*
 * This code was generated by https://github.com/googleapis/google-api-java-client-services/
 * Modify at your own risk.
 */

package com.google.api.services.content.model;

/**
 * Model definition for OrdersUpdateShipmentRequest.
 *
 * <p> This is the Java data model class that specifies how to parse/serialize into the JSON that is
 * transmitted over HTTP when working with the Content API for Shopping. For a detailed explanation
 * see:
 * <a href="https://developers.google.com/api-client-library/java/google-http-java-client/json">https://developers.google.com/api-client-library/java/google-http-java-client/json</a>
 * </p>
 *
 * @author Google, Inc.
 */
@SuppressWarnings("javadoc")
public final class OrdersUpdateShipmentRequest extends com.google.api.client.json.GenericJson {

  /**
   * The carrier handling the shipment. Not updated if missing. See `shipments[].carrier` in the
   * Orders resource representation for a list of acceptable values.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String carrier;

  /**
   * Date on which the shipment has been delivered, in ISO 8601 format. Optional and can be provided
   * only if `status` is `delivered`.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String deliveryDate;

  /**
   * Date after which the pickup will expire, in ISO 8601 format. Required only when order is buy-
   * online-pickup-in-store(BOPIS) and `status` is `ready for pickup`.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String lastPickupDate;

  /**
   * The ID of the operation. Unique across all operations for a given order.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String operationId;

  /**
   * Date on which the shipment has been ready for pickup, in ISO 8601 format. Optional and can be
   * provided only if `status` is `ready for pickup`.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String readyPickupDate;

  /**
   * Delivery details of the shipment if scheduling is needed.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private OrdersCustomBatchRequestEntryUpdateShipmentScheduledDeliveryDetails scheduledDeliveryDetails;

  /**
   * The ID of the shipment.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String shipmentId;

  /**
   * New status for the shipment. Not updated if missing. Acceptable values are: - "`delivered`" -
   * "`undeliverable`" - "`readyForPickup`"
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String status;

  /**
   * The tracking ID for the shipment. Not updated if missing.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String trackingId;

  /**
   * Date on which the shipment has been undeliverable, in ISO 8601 format. Optional and can be
   * provided only if `status` is `undeliverable`.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String undeliveredDate;

  /**
   * The carrier handling the shipment. Not updated if missing. See `shipments[].carrier` in the
   * Orders resource representation for a list of acceptable values.
   * @return value or {@code null} for none
   */
  public java.lang.String getCarrier() {
    return carrier;
  }

  /**
   * The carrier handling the shipment. Not updated if missing. See `shipments[].carrier` in the
   * Orders resource representation for a list of acceptable values.
   * @param carrier carrier or {@code null} for none
   */
  public OrdersUpdateShipmentRequest setCarrier(java.lang.String carrier) {
    this.carrier = carrier;
    return this;
  }

  /**
   * Date on which the shipment has been delivered, in ISO 8601 format. Optional and can be provided
   * only if `status` is `delivered`.
   * @return value or {@code null} for none
   */
  public java.lang.String getDeliveryDate() {
    return deliveryDate;
  }

  /**
   * Date on which the shipment has been delivered, in ISO 8601 format. Optional and can be provided
   * only if `status` is `delivered`.
   * @param deliveryDate deliveryDate or {@code null} for none
   */
  public OrdersUpdateShipmentRequest setDeliveryDate(java.lang.String deliveryDate) {
    this.deliveryDate = deliveryDate;
    return this;
  }

  /**
   * Date after which the pickup will expire, in ISO 8601 format. Required only when order is buy-
   * online-pickup-in-store(BOPIS) and `status` is `ready for pickup`.
   * @return value or {@code null} for none
   */
  public java.lang.String getLastPickupDate() {
    return lastPickupDate;
  }

  /**
   * Date after which the pickup will expire, in ISO 8601 format. Required only when order is buy-
   * online-pickup-in-store(BOPIS) and `status` is `ready for pickup`.
   * @param lastPickupDate lastPickupDate or {@code null} for none
   */
  public OrdersUpdateShipmentRequest setLastPickupDate(java.lang.String lastPickupDate) {
    this.lastPickupDate = lastPickupDate;
    return this;
  }

  /**
   * The ID of the operation. Unique across all operations for a given order.
   * @return value or {@code null} for none
   */
  public java.lang.String getOperationId() {
    return operationId;
  }

  /**
   * The ID of the operation. Unique across all operations for a given order.
   * @param operationId operationId or {@code null} for none
   */
  public OrdersUpdateShipmentRequest setOperationId(java.lang.String operationId) {
    this.operationId = operationId;
    return this;
  }

  /**
   * Date on which the shipment has been ready for pickup, in ISO 8601 format. Optional and can be
   * provided only if `status` is `ready for pickup`.
   * @return value or {@code null} for none
   */
  public java.lang.String getReadyPickupDate() {
    return readyPickupDate;
  }

  /**
   * Date on which the shipment has been ready for pickup, in ISO 8601 format. Optional and can be
   * provided only if `status` is `ready for pickup`.
   * @param readyPickupDate readyPickupDate or {@code null} for none
   */
  public OrdersUpdateShipmentRequest setReadyPickupDate(java.lang.String readyPickupDate) {
    this.readyPickupDate = readyPickupDate;
    return this;
  }

  /**
   * Delivery details of the shipment if scheduling is needed.
   * @return value or {@code null} for none
   */
  public OrdersCustomBatchRequestEntryUpdateShipmentScheduledDeliveryDetails getScheduledDeliveryDetails() {
    return scheduledDeliveryDetails;
  }

  /**
   * Delivery details of the shipment if scheduling is needed.
   * @param scheduledDeliveryDetails scheduledDeliveryDetails or {@code null} for none
   */
  public OrdersUpdateShipmentRequest setScheduledDeliveryDetails(OrdersCustomBatchRequestEntryUpdateShipmentScheduledDeliveryDetails scheduledDeliveryDetails) {
    this.scheduledDeliveryDetails = scheduledDeliveryDetails;
    return this;
  }

  /**
   * The ID of the shipment.
   * @return value or {@code null} for none
   */
  public java.lang.String getShipmentId() {
    return shipmentId;
  }

  /**
   * The ID of the shipment.
   * @param shipmentId shipmentId or {@code null} for none
   */
  public OrdersUpdateShipmentRequest setShipmentId(java.lang.String shipmentId) {
    this.shipmentId = shipmentId;
    return this;
  }

  /**
   * New status for the shipment. Not updated if missing. Acceptable values are: - "`delivered`" -
   * "`undeliverable`" - "`readyForPickup`"
   * @return value or {@code null} for none
   */
  public java.lang.String getStatus() {
    return status;
  }

  /**
   * New status for the shipment. Not updated if missing. Acceptable values are: - "`delivered`" -
   * "`undeliverable`" - "`readyForPickup`"
   * @param status status or {@code null} for none
   */
  public OrdersUpdateShipmentRequest setStatus(java.lang.String status) {
    this.status = status;
    return this;
  }

  /**
   * The tracking ID for the shipment. Not updated if missing.
   * @return value or {@code null} for none
   */
  public java.lang.String getTrackingId() {
    return trackingId;
  }

  /**
   * The tracking ID for the shipment. Not updated if missing.
   * @param trackingId trackingId or {@code null} for none
   */
  public OrdersUpdateShipmentRequest setTrackingId(java.lang.String trackingId) {
    this.trackingId = trackingId;
    return this;
  }

  /**
   * Date on which the shipment has been undeliverable, in ISO 8601 format. Optional and can be
   * provided only if `status` is `undeliverable`.
   * @return value or {@code null} for none
   */
  public java.lang.String getUndeliveredDate() {
    return undeliveredDate;
  }

  /**
   * Date on which the shipment has been undeliverable, in ISO 8601 format. Optional and can be
   * provided only if `status` is `undeliverable`.
   * @param undeliveredDate undeliveredDate or {@code null} for none
   */
  public OrdersUpdateShipmentRequest setUndeliveredDate(java.lang.String undeliveredDate) {
    this.undeliveredDate = undeliveredDate;
    return this;
  }

  @Override
  public OrdersUpdateShipmentRequest set(String fieldName, Object value) {
    return (OrdersUpdateShipmentRequest) super.set(fieldName, value);
  }

  @Override
  public OrdersUpdateShipmentRequest clone() {
    return (OrdersUpdateShipmentRequest) super.clone();
  }

}
