/*
 * Swagger of Opencellsoft Api
 * @#Introduction
 *
 * The version of the OpenAPI document: 7.3.1-SNAPSHOT
 * Contact: contact@opencellsoft.fr
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */


package org.openapitools.client.model;

import java.util.Objects;
import java.util.Arrays;
import com.google.gson.TypeAdapter;
import com.google.gson.annotations.JsonAdapter;
import com.google.gson.annotations.SerializedName;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import org.openapitools.client.model.OrderLinks;
import org.openapitools.client.model.Resource;

/**
 * Product
 */
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2019-09-13T10:03:17.753Z[GMT]")
public class Product {
  public static final String SERIALIZED_NAME_CODE = "code";
  @SerializedName(SERIALIZED_NAME_CODE)
  private String code;

  public static final String SERIALIZED_NAME_DESCRIPTION = "description";
  @SerializedName(SERIALIZED_NAME_DESCRIPTION)
  private String description;

  public static final String SERIALIZED_NAME_PRICE = "price";
  @SerializedName(SERIALIZED_NAME_PRICE)
  private BigDecimal price;

  public static final String SERIALIZED_NAME_SELLERS = "sellers";
  @SerializedName(SERIALIZED_NAME_SELLERS)
  private List<Resource> sellers = null;

  public static final String SERIALIZED_NAME_IMAGE_URL = "imageUrl";
  @SerializedName(SERIALIZED_NAME_IMAGE_URL)
  private String imageUrl;

  public static final String SERIALIZED_NAME_IMAGE64 = "image64";
  @SerializedName(SERIALIZED_NAME_IMAGE64)
  private String image64;

  public static final String SERIALIZED_NAME_INVOICING_CALENDAR = "invoicingCalendar";
  @SerializedName(SERIALIZED_NAME_INVOICING_CALENDAR)
  private Resource invoicingCalendar;

  public static final String SERIALIZED_NAME_PRODUCT_CHARGE_TEMPLATES = "productChargeTemplates";
  @SerializedName(SERIALIZED_NAME_PRODUCT_CHARGE_TEMPLATES)
  private List<Resource> productChargeTemplates = null;

  public static final String SERIALIZED_NAME_BUSINESS_PRODUCT_MODEL = "businessProductModel";
  @SerializedName(SERIALIZED_NAME_BUSINESS_PRODUCT_MODEL)
  private Resource businessProductModel;

  public static final String SERIALIZED_NAME_WALLET_TEMPLATES = "walletTemplates";
  @SerializedName(SERIALIZED_NAME_WALLET_TEMPLATES)
  private List<Resource> walletTemplates = null;

  public static final String SERIALIZED_NAME_OFFER_TEMPLATE_CATEGORIES = "offerTemplateCategories";
  @SerializedName(SERIALIZED_NAME_OFFER_TEMPLATE_CATEGORIES)
  private List<Resource> offerTemplateCategories = null;

  public static final String SERIALIZED_NAME_VALID_FROM = "validFrom";
  @SerializedName(SERIALIZED_NAME_VALID_FROM)
  private String validFrom;

  public static final String SERIALIZED_NAME_VALID_TO = "validTo";
  @SerializedName(SERIALIZED_NAME_VALID_TO)
  private String validTo;

  public static final String SERIALIZED_NAME_LIFE_CYCLE_STATUS = "lifeCycleStatus";
  @SerializedName(SERIALIZED_NAME_LIFE_CYCLE_STATUS)
  private String lifeCycleStatus;

  public static final String SERIALIZED_NAME_CHANNELS = "channels";
  @SerializedName(SERIALIZED_NAME_CHANNELS)
  private List<Resource> channels = null;

  public static final String SERIALIZED_NAME_LONG_DESCRIPTION = "longDescription";
  @SerializedName(SERIALIZED_NAME_LONG_DESCRIPTION)
  private String longDescription;

  public static final String SERIALIZED_NAME_NAME = "name";
  @SerializedName(SERIALIZED_NAME_NAME)
  private String name;

  public static final String SERIALIZED_NAME_LINKS = "links";
  @SerializedName(SERIALIZED_NAME_LINKS)
  private List<OrderLinks> links = null;

  public static final String SERIALIZED_NAME_ID = "id";
  @SerializedName(SERIALIZED_NAME_ID)
  private Long id;

  public static final String SERIALIZED_NAME_DISABLED = "disabled";
  @SerializedName(SERIALIZED_NAME_DISABLED)
  private Boolean disabled;


  public Product code(String code) {
    
    this.code = code;
    return this;
  }

   /**
   * Get code
   * @return code
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public String getCode() {
    return code;
  }



  public void setCode(String code) {
    this.code = code;
  }


  public Product description(String description) {
    
    this.description = description;
    return this;
  }

   /**
   * Get description
   * @return description
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public String getDescription() {
    return description;
  }



  public void setDescription(String description) {
    this.description = description;
  }


  public Product price(BigDecimal price) {
    
    this.price = price;
    return this;
  }

   /**
   * Get price
   * @return price
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public BigDecimal getPrice() {
    return price;
  }



  public void setPrice(BigDecimal price) {
    this.price = price;
  }


  public Product sellers(List<Resource> sellers) {
    
    this.sellers = sellers;
    return this;
  }

  public Product addSellersItem(Resource sellersItem) {
    if (this.sellers == null) {
      this.sellers = new ArrayList<Resource>();
    }
    this.sellers.add(sellersItem);
    return this;
  }

   /**
   * Get sellers
   * @return sellers
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public List<Resource> getSellers() {
    return sellers;
  }



  public void setSellers(List<Resource> sellers) {
    this.sellers = sellers;
  }


  public Product imageUrl(String imageUrl) {
    
    this.imageUrl = imageUrl;
    return this;
  }

   /**
   * Get imageUrl
   * @return imageUrl
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public String getImageUrl() {
    return imageUrl;
  }



  public void setImageUrl(String imageUrl) {
    this.imageUrl = imageUrl;
  }


  public Product image64(String image64) {
    
    this.image64 = image64;
    return this;
  }

   /**
   * Get image64
   * @return image64
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public String getImage64() {
    return image64;
  }



  public void setImage64(String image64) {
    this.image64 = image64;
  }


  public Product invoicingCalendar(Resource invoicingCalendar) {
    
    this.invoicingCalendar = invoicingCalendar;
    return this;
  }

   /**
   * Get invoicingCalendar
   * @return invoicingCalendar
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public Resource getInvoicingCalendar() {
    return invoicingCalendar;
  }



  public void setInvoicingCalendar(Resource invoicingCalendar) {
    this.invoicingCalendar = invoicingCalendar;
  }


  public Product productChargeTemplates(List<Resource> productChargeTemplates) {
    
    this.productChargeTemplates = productChargeTemplates;
    return this;
  }

  public Product addProductChargeTemplatesItem(Resource productChargeTemplatesItem) {
    if (this.productChargeTemplates == null) {
      this.productChargeTemplates = new ArrayList<Resource>();
    }
    this.productChargeTemplates.add(productChargeTemplatesItem);
    return this;
  }

   /**
   * Get productChargeTemplates
   * @return productChargeTemplates
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public List<Resource> getProductChargeTemplates() {
    return productChargeTemplates;
  }



  public void setProductChargeTemplates(List<Resource> productChargeTemplates) {
    this.productChargeTemplates = productChargeTemplates;
  }


  public Product businessProductModel(Resource businessProductModel) {
    
    this.businessProductModel = businessProductModel;
    return this;
  }

   /**
   * Get businessProductModel
   * @return businessProductModel
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public Resource getBusinessProductModel() {
    return businessProductModel;
  }



  public void setBusinessProductModel(Resource businessProductModel) {
    this.businessProductModel = businessProductModel;
  }


  public Product walletTemplates(List<Resource> walletTemplates) {
    
    this.walletTemplates = walletTemplates;
    return this;
  }

  public Product addWalletTemplatesItem(Resource walletTemplatesItem) {
    if (this.walletTemplates == null) {
      this.walletTemplates = new ArrayList<Resource>();
    }
    this.walletTemplates.add(walletTemplatesItem);
    return this;
  }

   /**
   * Get walletTemplates
   * @return walletTemplates
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public List<Resource> getWalletTemplates() {
    return walletTemplates;
  }



  public void setWalletTemplates(List<Resource> walletTemplates) {
    this.walletTemplates = walletTemplates;
  }


  public Product offerTemplateCategories(List<Resource> offerTemplateCategories) {
    
    this.offerTemplateCategories = offerTemplateCategories;
    return this;
  }

  public Product addOfferTemplateCategoriesItem(Resource offerTemplateCategoriesItem) {
    if (this.offerTemplateCategories == null) {
      this.offerTemplateCategories = new ArrayList<Resource>();
    }
    this.offerTemplateCategories.add(offerTemplateCategoriesItem);
    return this;
  }

   /**
   * Get offerTemplateCategories
   * @return offerTemplateCategories
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public List<Resource> getOfferTemplateCategories() {
    return offerTemplateCategories;
  }



  public void setOfferTemplateCategories(List<Resource> offerTemplateCategories) {
    this.offerTemplateCategories = offerTemplateCategories;
  }


  public Product validFrom(String validFrom) {
    
    this.validFrom = validFrom;
    return this;
  }

   /**
   * Get validFrom
   * @return validFrom
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public String getValidFrom() {
    return validFrom;
  }



  public void setValidFrom(String validFrom) {
    this.validFrom = validFrom;
  }


  public Product validTo(String validTo) {
    
    this.validTo = validTo;
    return this;
  }

   /**
   * Get validTo
   * @return validTo
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public String getValidTo() {
    return validTo;
  }



  public void setValidTo(String validTo) {
    this.validTo = validTo;
  }


  public Product lifeCycleStatus(String lifeCycleStatus) {
    
    this.lifeCycleStatus = lifeCycleStatus;
    return this;
  }

   /**
   * Get lifeCycleStatus
   * @return lifeCycleStatus
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public String getLifeCycleStatus() {
    return lifeCycleStatus;
  }



  public void setLifeCycleStatus(String lifeCycleStatus) {
    this.lifeCycleStatus = lifeCycleStatus;
  }


  public Product channels(List<Resource> channels) {
    
    this.channels = channels;
    return this;
  }

  public Product addChannelsItem(Resource channelsItem) {
    if (this.channels == null) {
      this.channels = new ArrayList<Resource>();
    }
    this.channels.add(channelsItem);
    return this;
  }

   /**
   * Get channels
   * @return channels
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public List<Resource> getChannels() {
    return channels;
  }



  public void setChannels(List<Resource> channels) {
    this.channels = channels;
  }


  public Product longDescription(String longDescription) {
    
    this.longDescription = longDescription;
    return this;
  }

   /**
   * Get longDescription
   * @return longDescription
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public String getLongDescription() {
    return longDescription;
  }



  public void setLongDescription(String longDescription) {
    this.longDescription = longDescription;
  }


  public Product name(String name) {
    
    this.name = name;
    return this;
  }

   /**
   * Get name
   * @return name
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public String getName() {
    return name;
  }



  public void setName(String name) {
    this.name = name;
  }


  public Product links(List<OrderLinks> links) {
    
    this.links = links;
    return this;
  }

  public Product addLinksItem(OrderLinks linksItem) {
    if (this.links == null) {
      this.links = new ArrayList<OrderLinks>();
    }
    this.links.add(linksItem);
    return this;
  }

   /**
   * Get links
   * @return links
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public List<OrderLinks> getLinks() {
    return links;
  }



  public void setLinks(List<OrderLinks> links) {
    this.links = links;
  }


  public Product id(Long id) {
    
    this.id = id;
    return this;
  }

   /**
   * Get id
   * @return id
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public Long getId() {
    return id;
  }



  public void setId(Long id) {
    this.id = id;
  }


  public Product disabled(Boolean disabled) {
    
    this.disabled = disabled;
    return this;
  }

   /**
   * Get disabled
   * @return disabled
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public Boolean getDisabled() {
    return disabled;
  }



  public void setDisabled(Boolean disabled) {
    this.disabled = disabled;
  }


  @Override
  public boolean equals(java.lang.Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    Product product = (Product) o;
    return Objects.equals(this.code, product.code) &&
        Objects.equals(this.description, product.description) &&
        Objects.equals(this.price, product.price) &&
        Objects.equals(this.sellers, product.sellers) &&
        Objects.equals(this.imageUrl, product.imageUrl) &&
        Objects.equals(this.image64, product.image64) &&
        Objects.equals(this.invoicingCalendar, product.invoicingCalendar) &&
        Objects.equals(this.productChargeTemplates, product.productChargeTemplates) &&
        Objects.equals(this.businessProductModel, product.businessProductModel) &&
        Objects.equals(this.walletTemplates, product.walletTemplates) &&
        Objects.equals(this.offerTemplateCategories, product.offerTemplateCategories) &&
        Objects.equals(this.validFrom, product.validFrom) &&
        Objects.equals(this.validTo, product.validTo) &&
        Objects.equals(this.lifeCycleStatus, product.lifeCycleStatus) &&
        Objects.equals(this.channels, product.channels) &&
        Objects.equals(this.longDescription, product.longDescription) &&
        Objects.equals(this.name, product.name) &&
        Objects.equals(this.links, product.links) &&
        Objects.equals(this.id, product.id) &&
        Objects.equals(this.disabled, product.disabled);
  }

  @Override
  public int hashCode() {
    return Objects.hash(code, description, price, sellers, imageUrl, image64, invoicingCalendar, productChargeTemplates, businessProductModel, walletTemplates, offerTemplateCategories, validFrom, validTo, lifeCycleStatus, channels, longDescription, name, links, id, disabled);
  }


  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class Product {\n");
    sb.append("    code: ").append(toIndentedString(code)).append("\n");
    sb.append("    description: ").append(toIndentedString(description)).append("\n");
    sb.append("    price: ").append(toIndentedString(price)).append("\n");
    sb.append("    sellers: ").append(toIndentedString(sellers)).append("\n");
    sb.append("    imageUrl: ").append(toIndentedString(imageUrl)).append("\n");
    sb.append("    image64: ").append(toIndentedString(image64)).append("\n");
    sb.append("    invoicingCalendar: ").append(toIndentedString(invoicingCalendar)).append("\n");
    sb.append("    productChargeTemplates: ").append(toIndentedString(productChargeTemplates)).append("\n");
    sb.append("    businessProductModel: ").append(toIndentedString(businessProductModel)).append("\n");
    sb.append("    walletTemplates: ").append(toIndentedString(walletTemplates)).append("\n");
    sb.append("    offerTemplateCategories: ").append(toIndentedString(offerTemplateCategories)).append("\n");
    sb.append("    validFrom: ").append(toIndentedString(validFrom)).append("\n");
    sb.append("    validTo: ").append(toIndentedString(validTo)).append("\n");
    sb.append("    lifeCycleStatus: ").append(toIndentedString(lifeCycleStatus)).append("\n");
    sb.append("    channels: ").append(toIndentedString(channels)).append("\n");
    sb.append("    longDescription: ").append(toIndentedString(longDescription)).append("\n");
    sb.append("    name: ").append(toIndentedString(name)).append("\n");
    sb.append("    links: ").append(toIndentedString(links)).append("\n");
    sb.append("    id: ").append(toIndentedString(id)).append("\n");
    sb.append("    disabled: ").append(toIndentedString(disabled)).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    ");
  }

}

