// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
// Code generated by Microsoft (R) AutoRest Code Generator.

package com.azure.resourcemanager.billing.models;

import com.azure.resourcemanager.billing.fluent.models.ProductInner;
import java.time.OffsetDateTime;

/** An immutable client-side representation of Product. */
public interface Product {
    /**
     * Gets the id property: Fully qualified resource Id for the resource.
     *
     * @return the id value.
     */
    String id();

    /**
     * Gets the name property: The name of the resource.
     *
     * @return the name value.
     */
    String name();

    /**
     * Gets the type property: The type of the resource.
     *
     * @return the type value.
     */
    String type();

    /**
     * Gets the autoRenew property: Indicates whether auto renewal is turned on or off for a product.
     *
     * @return the autoRenew value.
     */
    AutoRenew autoRenew();

    /**
     * Gets the displayName property: The display name of the product.
     *
     * @return the displayName value.
     */
    String displayName();

    /**
     * Gets the purchaseDate property: The date when the product was purchased.
     *
     * @return the purchaseDate value.
     */
    OffsetDateTime purchaseDate();

    /**
     * Gets the productTypeId property: The ID of the type of product.
     *
     * @return the productTypeId value.
     */
    String productTypeId();

    /**
     * Gets the productType property: The description of the type of product.
     *
     * @return the productType value.
     */
    String productType();

    /**
     * Gets the status property: The current status of the product.
     *
     * @return the status value.
     */
    ProductStatusType status();

    /**
     * Gets the endDate property: The date when the product will be renewed or canceled.
     *
     * @return the endDate value.
     */
    OffsetDateTime endDate();

    /**
     * Gets the billingFrequency property: The frequency at which the product will be billed.
     *
     * @return the billingFrequency value.
     */
    BillingFrequency billingFrequency();

    /**
     * Gets the lastCharge property: The last month charges.
     *
     * @return the lastCharge value.
     */
    Amount lastCharge();

    /**
     * Gets the lastChargeDate property: The date of the last charge.
     *
     * @return the lastChargeDate value.
     */
    OffsetDateTime lastChargeDate();

    /**
     * Gets the quantity property: The quantity purchased for the product.
     *
     * @return the quantity value.
     */
    Float quantity();

    /**
     * Gets the skuId property: The sku ID of the product.
     *
     * @return the skuId value.
     */
    String skuId();

    /**
     * Gets the skuDescription property: The sku description of the product.
     *
     * @return the skuDescription value.
     */
    String skuDescription();

    /**
     * Gets the tenantId property: The id of the tenant in which the product is used.
     *
     * @return the tenantId value.
     */
    String tenantId();

    /**
     * Gets the availabilityId property: The availability of the product.
     *
     * @return the availabilityId value.
     */
    String availabilityId();

    /**
     * Gets the invoiceSectionId property: The ID of the invoice section to which the product is billed.
     *
     * @return the invoiceSectionId value.
     */
    String invoiceSectionId();

    /**
     * Gets the invoiceSectionDisplayName property: The name of the invoice section to which the product is billed.
     *
     * @return the invoiceSectionDisplayName value.
     */
    String invoiceSectionDisplayName();

    /**
     * Gets the billingProfileId property: The ID of the billing profile to which the product is billed.
     *
     * @return the billingProfileId value.
     */
    String billingProfileId();

    /**
     * Gets the billingProfileDisplayName property: The name of the billing profile to which the product is billed.
     *
     * @return the billingProfileDisplayName value.
     */
    String billingProfileDisplayName();

    /**
     * Gets the customerId property: The ID of the customer for whom the product was purchased. The field is applicable
     * only for Microsoft Partner Agreement billing account.
     *
     * @return the customerId value.
     */
    String customerId();

    /**
     * Gets the customerDisplayName property: The name of the customer for whom the product was purchased. The field is
     * applicable only for Microsoft Partner Agreement billing account.
     *
     * @return the customerDisplayName value.
     */
    String customerDisplayName();

    /**
     * Gets the reseller property: Reseller for this product.
     *
     * @return the reseller value.
     */
    Reseller reseller();

    /**
     * Gets the inner com.azure.resourcemanager.billing.fluent.models.ProductInner object.
     *
     * @return the inner object.
     */
    ProductInner innerModel();
}
