/*
 * Copyright 2020 Google LLC
 *
 * 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
 *
 *     https://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.
 */
// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: google/cloud/channel/v1/repricing.proto

package com.google.cloud.channel.v1;

public interface RepricingConfigOrBuilder
    extends
    // @@protoc_insertion_point(interface_extends:google.cloud.channel.v1.RepricingConfig)
    com.google.protobuf.MessageOrBuilder {

  /**
   *
   *
   * <pre>
   * Applies the repricing configuration at the entitlement level. This is
   * the only supported value for CustomerRepricingConfig.
   * </pre>
   *
   * <code>
   * .google.cloud.channel.v1.RepricingConfig.EntitlementGranularity entitlement_granularity = 4;
   * </code>
   *
   * @return Whether the entitlementGranularity field is set.
   */
  boolean hasEntitlementGranularity();
  /**
   *
   *
   * <pre>
   * Applies the repricing configuration at the entitlement level. This is
   * the only supported value for CustomerRepricingConfig.
   * </pre>
   *
   * <code>
   * .google.cloud.channel.v1.RepricingConfig.EntitlementGranularity entitlement_granularity = 4;
   * </code>
   *
   * @return The entitlementGranularity.
   */
  com.google.cloud.channel.v1.RepricingConfig.EntitlementGranularity getEntitlementGranularity();
  /**
   *
   *
   * <pre>
   * Applies the repricing configuration at the entitlement level. This is
   * the only supported value for CustomerRepricingConfig.
   * </pre>
   *
   * <code>
   * .google.cloud.channel.v1.RepricingConfig.EntitlementGranularity entitlement_granularity = 4;
   * </code>
   */
  com.google.cloud.channel.v1.RepricingConfig.EntitlementGranularityOrBuilder
      getEntitlementGranularityOrBuilder();

  /**
   *
   *
   * <pre>
   * Applies the repricing configuration at the channel partner level.
   * This is the only supported value for ChannelPartnerRepricingConfig.
   * </pre>
   *
   * <code>
   * .google.cloud.channel.v1.RepricingConfig.ChannelPartnerGranularity channel_partner_granularity = 5;
   * </code>
   *
   * @return Whether the channelPartnerGranularity field is set.
   */
  boolean hasChannelPartnerGranularity();
  /**
   *
   *
   * <pre>
   * Applies the repricing configuration at the channel partner level.
   * This is the only supported value for ChannelPartnerRepricingConfig.
   * </pre>
   *
   * <code>
   * .google.cloud.channel.v1.RepricingConfig.ChannelPartnerGranularity channel_partner_granularity = 5;
   * </code>
   *
   * @return The channelPartnerGranularity.
   */
  com.google.cloud.channel.v1.RepricingConfig.ChannelPartnerGranularity
      getChannelPartnerGranularity();
  /**
   *
   *
   * <pre>
   * Applies the repricing configuration at the channel partner level.
   * This is the only supported value for ChannelPartnerRepricingConfig.
   * </pre>
   *
   * <code>
   * .google.cloud.channel.v1.RepricingConfig.ChannelPartnerGranularity channel_partner_granularity = 5;
   * </code>
   */
  com.google.cloud.channel.v1.RepricingConfig.ChannelPartnerGranularityOrBuilder
      getChannelPartnerGranularityOrBuilder();

  /**
   *
   *
   * <pre>
   * Required. The YearMonth when these adjustments activate. The Day field
   * needs to be "0" since we only accept YearMonth repricing boundaries.
   * </pre>
   *
   * <code>.google.type.Date effective_invoice_month = 1 [(.google.api.field_behavior) = REQUIRED];
   * </code>
   *
   * @return Whether the effectiveInvoiceMonth field is set.
   */
  boolean hasEffectiveInvoiceMonth();
  /**
   *
   *
   * <pre>
   * Required. The YearMonth when these adjustments activate. The Day field
   * needs to be "0" since we only accept YearMonth repricing boundaries.
   * </pre>
   *
   * <code>.google.type.Date effective_invoice_month = 1 [(.google.api.field_behavior) = REQUIRED];
   * </code>
   *
   * @return The effectiveInvoiceMonth.
   */
  com.google.type.Date getEffectiveInvoiceMonth();
  /**
   *
   *
   * <pre>
   * Required. The YearMonth when these adjustments activate. The Day field
   * needs to be "0" since we only accept YearMonth repricing boundaries.
   * </pre>
   *
   * <code>.google.type.Date effective_invoice_month = 1 [(.google.api.field_behavior) = REQUIRED];
   * </code>
   */
  com.google.type.DateOrBuilder getEffectiveInvoiceMonthOrBuilder();

  /**
   *
   *
   * <pre>
   * Required. Information about the adjustment.
   * </pre>
   *
   * <code>
   * .google.cloud.channel.v1.RepricingAdjustment adjustment = 2 [(.google.api.field_behavior) = REQUIRED];
   * </code>
   *
   * @return Whether the adjustment field is set.
   */
  boolean hasAdjustment();
  /**
   *
   *
   * <pre>
   * Required. Information about the adjustment.
   * </pre>
   *
   * <code>
   * .google.cloud.channel.v1.RepricingAdjustment adjustment = 2 [(.google.api.field_behavior) = REQUIRED];
   * </code>
   *
   * @return The adjustment.
   */
  com.google.cloud.channel.v1.RepricingAdjustment getAdjustment();
  /**
   *
   *
   * <pre>
   * Required. Information about the adjustment.
   * </pre>
   *
   * <code>
   * .google.cloud.channel.v1.RepricingAdjustment adjustment = 2 [(.google.api.field_behavior) = REQUIRED];
   * </code>
   */
  com.google.cloud.channel.v1.RepricingAdjustmentOrBuilder getAdjustmentOrBuilder();

  /**
   *
   *
   * <pre>
   * Required. The [RebillingBasis][google.cloud.channel.v1.RebillingBasis] to
   * use for this bill. Specifies the relative cost based on repricing costs you
   * will apply.
   * </pre>
   *
   * <code>
   * .google.cloud.channel.v1.RebillingBasis rebilling_basis = 3 [(.google.api.field_behavior) = REQUIRED];
   * </code>
   *
   * @return The enum numeric value on the wire for rebillingBasis.
   */
  int getRebillingBasisValue();
  /**
   *
   *
   * <pre>
   * Required. The [RebillingBasis][google.cloud.channel.v1.RebillingBasis] to
   * use for this bill. Specifies the relative cost based on repricing costs you
   * will apply.
   * </pre>
   *
   * <code>
   * .google.cloud.channel.v1.RebillingBasis rebilling_basis = 3 [(.google.api.field_behavior) = REQUIRED];
   * </code>
   *
   * @return The rebillingBasis.
   */
  com.google.cloud.channel.v1.RebillingBasis getRebillingBasis();

  /**
   *
   *
   * <pre>
   * The conditional overrides to apply for this configuration. If you list
   * multiple overrides, only the first valid override is used.  If you don't
   * list any overrides, the API uses the normal adjustment and rebilling basis.
   * </pre>
   *
   * <code>repeated .google.cloud.channel.v1.ConditionalOverride conditional_overrides = 6;</code>
   */
  java.util.List<com.google.cloud.channel.v1.ConditionalOverride> getConditionalOverridesList();
  /**
   *
   *
   * <pre>
   * The conditional overrides to apply for this configuration. If you list
   * multiple overrides, only the first valid override is used.  If you don't
   * list any overrides, the API uses the normal adjustment and rebilling basis.
   * </pre>
   *
   * <code>repeated .google.cloud.channel.v1.ConditionalOverride conditional_overrides = 6;</code>
   */
  com.google.cloud.channel.v1.ConditionalOverride getConditionalOverrides(int index);
  /**
   *
   *
   * <pre>
   * The conditional overrides to apply for this configuration. If you list
   * multiple overrides, only the first valid override is used.  If you don't
   * list any overrides, the API uses the normal adjustment and rebilling basis.
   * </pre>
   *
   * <code>repeated .google.cloud.channel.v1.ConditionalOverride conditional_overrides = 6;</code>
   */
  int getConditionalOverridesCount();
  /**
   *
   *
   * <pre>
   * The conditional overrides to apply for this configuration. If you list
   * multiple overrides, only the first valid override is used.  If you don't
   * list any overrides, the API uses the normal adjustment and rebilling basis.
   * </pre>
   *
   * <code>repeated .google.cloud.channel.v1.ConditionalOverride conditional_overrides = 6;</code>
   */
  java.util.List<? extends com.google.cloud.channel.v1.ConditionalOverrideOrBuilder>
      getConditionalOverridesOrBuilderList();
  /**
   *
   *
   * <pre>
   * The conditional overrides to apply for this configuration. If you list
   * multiple overrides, only the first valid override is used.  If you don't
   * list any overrides, the API uses the normal adjustment and rebilling basis.
   * </pre>
   *
   * <code>repeated .google.cloud.channel.v1.ConditionalOverride conditional_overrides = 6;</code>
   */
  com.google.cloud.channel.v1.ConditionalOverrideOrBuilder getConditionalOverridesOrBuilder(
      int index);

  public com.google.cloud.channel.v1.RepricingConfig.GranularityCase getGranularityCase();
}
