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

package com.azure.resourcemanager.reservations.fluent;

import com.azure.core.annotation.ReturnType;
import com.azure.core.annotation.ServiceMethod;
import com.azure.core.http.rest.PagedIterable;
import com.azure.core.http.rest.Response;
import com.azure.core.util.Context;
import com.azure.resourcemanager.reservations.fluent.models.QuotaRequestDetailsInner;

/** An instance of this class provides access to all the operations defined in QuotaRequestStatusClient. */
public interface QuotaRequestStatusClient {
    /**
     * For the specified Azure region (location), get the details and status of the quota request by the quota request
     * ID for the resources of the resource provider. The PUT request for the quota (service limit) returns a response
     * with the requestId parameter.
     *
     * @param subscriptionId Azure subscription ID.
     * @param providerId Azure resource provider ID.
     * @param location Azure region.
     * @param id Quota Request ID.
     * @param context The context to associate with this operation.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.core.management.exception.ManagementException thrown if the request is rejected by server.
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent.
     * @return quota request details along with {@link Response}.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    Response<QuotaRequestDetailsInner> getWithResponse(
        String subscriptionId, String providerId, String location, String id, Context context);

    /**
     * For the specified Azure region (location), get the details and status of the quota request by the quota request
     * ID for the resources of the resource provider. The PUT request for the quota (service limit) returns a response
     * with the requestId parameter.
     *
     * @param subscriptionId Azure subscription ID.
     * @param providerId Azure resource provider ID.
     * @param location Azure region.
     * @param id Quota Request ID.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.core.management.exception.ManagementException thrown if the request is rejected by server.
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent.
     * @return quota request details.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    QuotaRequestDetailsInner get(String subscriptionId, String providerId, String location, String id);

    /**
     * For the specified Azure region (location), subscription, and resource provider, get the history of the quota
     * requests for the past year. To select specific quota requests, use the oData filter.
     *
     * @param subscriptionId Azure subscription ID.
     * @param providerId Azure resource provider ID.
     * @param location Azure region.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.core.management.exception.ManagementException thrown if the request is rejected by server.
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent.
     * @return quota request details as paginated response with {@link PagedIterable}.
     */
    @ServiceMethod(returns = ReturnType.COLLECTION)
    PagedIterable<QuotaRequestDetailsInner> list(String subscriptionId, String providerId, String location);

    /**
     * For the specified Azure region (location), subscription, and resource provider, get the history of the quota
     * requests for the past year. To select specific quota requests, use the oData filter.
     *
     * @param subscriptionId Azure subscription ID.
     * @param providerId Azure resource provider ID.
     * @param location Azure region.
     * @param filter | Field | Supported operators | |---------------------|------------------------| |requestSubmitTime
     *     | ge, le, eq, gt, lt |.
     * @param top Number of records to return.
     * @param skiptoken Skiptoken is only used if a previous operation returned a partial result. If a previous response
     *     contains a nextLink element, the value of the nextLink element includes a skiptoken parameter that specifies
     *     a starting point to use for subsequent calls.
     * @param context The context to associate with this operation.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.core.management.exception.ManagementException thrown if the request is rejected by server.
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent.
     * @return quota request details as paginated response with {@link PagedIterable}.
     */
    @ServiceMethod(returns = ReturnType.COLLECTION)
    PagedIterable<QuotaRequestDetailsInner> list(
        String subscriptionId,
        String providerId,
        String location,
        String filter,
        Integer top,
        String skiptoken,
        Context context);
}
