// 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.ReservationInner;
import java.util.List;

/** An immutable client-side representation of Reservation. */
public interface Reservation {
    /**
     * Gets the id property: The id of the reservation.
     *
     * @return the id value.
     */
    String id();

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

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

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

    /**
     * Gets the sku property: The sku information associated to this reservation.
     *
     * @return the sku value.
     */
    ReservationSkuProperty sku();

    /**
     * Gets the appliedScopes property: The array of applied scopes of a reservation. Will be null if the reservation is
     * in Shared scope.
     *
     * @return the appliedScopes value.
     */
    List<String> appliedScopes();

    /**
     * Gets the appliedScopeType property: The applied scope type of the reservation.
     *
     * @return the appliedScopeType value.
     */
    String appliedScopeType();

    /**
     * Gets the reservedResourceType property: The reserved source type of the reservation, e.g. virtual machine.
     *
     * @return the reservedResourceType value.
     */
    String reservedResourceType();

    /**
     * Gets the quantity property: The number of the reservation.
     *
     * @return the quantity value.
     */
    Float quantity();

    /**
     * Gets the provisioningState property: The provisioning state of the reservation, e.g. Succeeded.
     *
     * @return the provisioningState value.
     */
    String provisioningState();

    /**
     * Gets the expiryDate property: The expiry date of the reservation.
     *
     * @return the expiryDate value.
     */
    String expiryDate();

    /**
     * Gets the provisioningSubState property: The provisioning state of the reservation, e.g. Succeeded.
     *
     * @return the provisioningSubState value.
     */
    String provisioningSubState();

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

    /**
     * Gets the displayProvisioningState property: The provisioning state of the reservation for display, e.g.
     * Succeeded.
     *
     * @return the displayProvisioningState value.
     */
    String displayProvisioningState();

    /**
     * Gets the userFriendlyRenewState property: The renew state of the reservation for display, e.g. On.
     *
     * @return the userFriendlyRenewState value.
     */
    String userFriendlyRenewState();

    /**
     * Gets the userFriendlyAppliedScopeType property: The applied scope type of the reservation for display, e.g.
     * Shared.
     *
     * @return the userFriendlyAppliedScopeType value.
     */
    String userFriendlyAppliedScopeType();

    /**
     * Gets the effectiveDateTime property: The effective date time of the reservation.
     *
     * @return the effectiveDateTime value.
     */
    String effectiveDateTime();

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

    /**
     * Gets the term property: The term of the reservation, e.g. P1Y.
     *
     * @return the term value.
     */
    String term();

    /**
     * Gets the renew property: The renew state of the reservation.
     *
     * @return the renew value.
     */
    Boolean renew();

    /**
     * Gets the renewSource property: The renew source of the reservation.
     *
     * @return the renewSource value.
     */
    String renewSource();

    /**
     * Gets the utilization property: Reservation utilization.
     *
     * @return the utilization value.
     */
    ReservationPropertyUtilization utilization();

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