/**
 * Copyright (c) Microsoft Corporation. All rights reserved.
 * Licensed under the MIT License. See License.txt in the project root for
 * license information.
 *
 * Code generated by Microsoft (R) AutoRest Code Generator.
 */

package com.microsoft.azure.batch.protocol;

import com.microsoft.azure.batch.protocol.models.AccountListPoolNodeCountsHeaders;
import com.microsoft.azure.batch.protocol.models.AccountListPoolNodeCountsNextOptions;
import com.microsoft.azure.batch.protocol.models.AccountListPoolNodeCountsOptions;
import com.microsoft.azure.batch.protocol.models.AccountListSupportedImagesHeaders;
import com.microsoft.azure.batch.protocol.models.AccountListSupportedImagesNextOptions;
import com.microsoft.azure.batch.protocol.models.AccountListSupportedImagesOptions;
import com.microsoft.azure.batch.protocol.models.BatchErrorException;
import com.microsoft.azure.batch.protocol.models.ImageInformation;
import com.microsoft.azure.batch.protocol.models.PoolNodeCounts;
import com.microsoft.azure.ListOperationCallback;
import com.microsoft.azure.Page;
import com.microsoft.azure.PagedList;
import com.microsoft.rest.ServiceFuture;
import com.microsoft.rest.ServiceResponseWithHeaders;
import java.io.IOException;
import java.util.List;
import rx.Observable;

/**
 * An instance of this class provides access to all the operations defined
 * in Accounts.
 */
public interface Accounts {
    /**
     * Lists all Virtual Machine Images supported by the Azure Batch service.
     *
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws BatchErrorException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the PagedList&lt;ImageInformation&gt; object if successful.
     */
    PagedList<ImageInformation> listSupportedImages();

    /**
     * Lists all Virtual Machine Images supported by the Azure Batch service.
     *
     * @param serviceCallback the async ServiceCallback to handle successful and failed responses.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the {@link ServiceFuture} object
     */
    ServiceFuture<List<ImageInformation>> listSupportedImagesAsync(final ListOperationCallback<ImageInformation> serviceCallback);

    /**
     * Lists all Virtual Machine Images supported by the Azure Batch service.
     *
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the PagedList&lt;ImageInformation&gt; object
     */
    Observable<Page<ImageInformation>> listSupportedImagesAsync();

    /**
     * Lists all Virtual Machine Images supported by the Azure Batch service.
     *
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the PagedList&lt;ImageInformation&gt; object
     */
    Observable<ServiceResponseWithHeaders<Page<ImageInformation>, AccountListSupportedImagesHeaders>> listSupportedImagesWithServiceResponseAsync();
    /**
     * Lists all Virtual Machine Images supported by the Azure Batch service.
     *
     * @param accountListSupportedImagesOptions Additional parameters for the operation
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws BatchErrorException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the PagedList&lt;ImageInformation&gt; object if successful.
     */
    PagedList<ImageInformation> listSupportedImages(final AccountListSupportedImagesOptions accountListSupportedImagesOptions);

    /**
     * Lists all Virtual Machine Images supported by the Azure Batch service.
     *
     * @param accountListSupportedImagesOptions Additional parameters for the operation
     * @param serviceCallback the async ServiceCallback to handle successful and failed responses.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the {@link ServiceFuture} object
     */
    ServiceFuture<List<ImageInformation>> listSupportedImagesAsync(final AccountListSupportedImagesOptions accountListSupportedImagesOptions, final ListOperationCallback<ImageInformation> serviceCallback);

    /**
     * Lists all Virtual Machine Images supported by the Azure Batch service.
     *
     * @param accountListSupportedImagesOptions Additional parameters for the operation
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the PagedList&lt;ImageInformation&gt; object
     */
    Observable<Page<ImageInformation>> listSupportedImagesAsync(final AccountListSupportedImagesOptions accountListSupportedImagesOptions);

    /**
     * Lists all Virtual Machine Images supported by the Azure Batch service.
     *
     * @param accountListSupportedImagesOptions Additional parameters for the operation
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the PagedList&lt;ImageInformation&gt; object
     */
    Observable<ServiceResponseWithHeaders<Page<ImageInformation>, AccountListSupportedImagesHeaders>> listSupportedImagesWithServiceResponseAsync(final AccountListSupportedImagesOptions accountListSupportedImagesOptions);

    /**
     * Gets the number of Compute Nodes in each state, grouped by Pool. Note that the numbers returned may not always be up to date. If you need exact node counts, use a list query.
     *
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws BatchErrorException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the PagedList&lt;PoolNodeCounts&gt; object if successful.
     */
    PagedList<PoolNodeCounts> listPoolNodeCounts();

    /**
     * Gets the number of Compute Nodes in each state, grouped by Pool. Note that the numbers returned may not always be up to date. If you need exact node counts, use a list query.
     *
     * @param serviceCallback the async ServiceCallback to handle successful and failed responses.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the {@link ServiceFuture} object
     */
    ServiceFuture<List<PoolNodeCounts>> listPoolNodeCountsAsync(final ListOperationCallback<PoolNodeCounts> serviceCallback);

    /**
     * Gets the number of Compute Nodes in each state, grouped by Pool. Note that the numbers returned may not always be up to date. If you need exact node counts, use a list query.
     *
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the PagedList&lt;PoolNodeCounts&gt; object
     */
    Observable<Page<PoolNodeCounts>> listPoolNodeCountsAsync();

    /**
     * Gets the number of Compute Nodes in each state, grouped by Pool. Note that the numbers returned may not always be up to date. If you need exact node counts, use a list query.
     *
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the PagedList&lt;PoolNodeCounts&gt; object
     */
    Observable<ServiceResponseWithHeaders<Page<PoolNodeCounts>, AccountListPoolNodeCountsHeaders>> listPoolNodeCountsWithServiceResponseAsync();
    /**
     * Gets the number of Compute Nodes in each state, grouped by Pool. Note that the numbers returned may not always be up to date. If you need exact node counts, use a list query.
     *
     * @param accountListPoolNodeCountsOptions Additional parameters for the operation
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws BatchErrorException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the PagedList&lt;PoolNodeCounts&gt; object if successful.
     */
    PagedList<PoolNodeCounts> listPoolNodeCounts(final AccountListPoolNodeCountsOptions accountListPoolNodeCountsOptions);

    /**
     * Gets the number of Compute Nodes in each state, grouped by Pool. Note that the numbers returned may not always be up to date. If you need exact node counts, use a list query.
     *
     * @param accountListPoolNodeCountsOptions Additional parameters for the operation
     * @param serviceCallback the async ServiceCallback to handle successful and failed responses.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the {@link ServiceFuture} object
     */
    ServiceFuture<List<PoolNodeCounts>> listPoolNodeCountsAsync(final AccountListPoolNodeCountsOptions accountListPoolNodeCountsOptions, final ListOperationCallback<PoolNodeCounts> serviceCallback);

    /**
     * Gets the number of Compute Nodes in each state, grouped by Pool. Note that the numbers returned may not always be up to date. If you need exact node counts, use a list query.
     *
     * @param accountListPoolNodeCountsOptions Additional parameters for the operation
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the PagedList&lt;PoolNodeCounts&gt; object
     */
    Observable<Page<PoolNodeCounts>> listPoolNodeCountsAsync(final AccountListPoolNodeCountsOptions accountListPoolNodeCountsOptions);

    /**
     * Gets the number of Compute Nodes in each state, grouped by Pool. Note that the numbers returned may not always be up to date. If you need exact node counts, use a list query.
     *
     * @param accountListPoolNodeCountsOptions Additional parameters for the operation
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the PagedList&lt;PoolNodeCounts&gt; object
     */
    Observable<ServiceResponseWithHeaders<Page<PoolNodeCounts>, AccountListPoolNodeCountsHeaders>> listPoolNodeCountsWithServiceResponseAsync(final AccountListPoolNodeCountsOptions accountListPoolNodeCountsOptions);

    /**
     * Lists all Virtual Machine Images supported by the Azure Batch service.
     *
     * @param nextPageLink The NextLink from the previous successful call to List operation.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws BatchErrorException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the PagedList&lt;ImageInformation&gt; object if successful.
     */
    PagedList<ImageInformation> listSupportedImagesNext(final String nextPageLink);

    /**
     * Lists all Virtual Machine Images supported by the Azure Batch service.
     *
     * @param nextPageLink The NextLink from the previous successful call to List operation.
     * @param serviceFuture the ServiceFuture object tracking the Retrofit calls
     * @param serviceCallback the async ServiceCallback to handle successful and failed responses.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the {@link ServiceFuture} object
     */
    ServiceFuture<List<ImageInformation>> listSupportedImagesNextAsync(final String nextPageLink, final ServiceFuture<List<ImageInformation>> serviceFuture, final ListOperationCallback<ImageInformation> serviceCallback);

    /**
     * Lists all Virtual Machine Images supported by the Azure Batch service.
     *
     * @param nextPageLink The NextLink from the previous successful call to List operation.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the PagedList&lt;ImageInformation&gt; object
     */
    Observable<Page<ImageInformation>> listSupportedImagesNextAsync(final String nextPageLink);

    /**
     * Lists all Virtual Machine Images supported by the Azure Batch service.
     *
     * @param nextPageLink The NextLink from the previous successful call to List operation.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the PagedList&lt;ImageInformation&gt; object
     */
    Observable<ServiceResponseWithHeaders<Page<ImageInformation>, AccountListSupportedImagesHeaders>> listSupportedImagesNextWithServiceResponseAsync(final String nextPageLink);
    /**
     * Lists all Virtual Machine Images supported by the Azure Batch service.
     *
     * @param nextPageLink The NextLink from the previous successful call to List operation.
     * @param accountListSupportedImagesNextOptions Additional parameters for the operation
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws BatchErrorException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the PagedList&lt;ImageInformation&gt; object if successful.
     */
    PagedList<ImageInformation> listSupportedImagesNext(final String nextPageLink, final AccountListSupportedImagesNextOptions accountListSupportedImagesNextOptions);

    /**
     * Lists all Virtual Machine Images supported by the Azure Batch service.
     *
     * @param nextPageLink The NextLink from the previous successful call to List operation.
     * @param accountListSupportedImagesNextOptions Additional parameters for the operation
     * @param serviceFuture the ServiceFuture object tracking the Retrofit calls
     * @param serviceCallback the async ServiceCallback to handle successful and failed responses.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the {@link ServiceFuture} object
     */
    ServiceFuture<List<ImageInformation>> listSupportedImagesNextAsync(final String nextPageLink, final AccountListSupportedImagesNextOptions accountListSupportedImagesNextOptions, final ServiceFuture<List<ImageInformation>> serviceFuture, final ListOperationCallback<ImageInformation> serviceCallback);

    /**
     * Lists all Virtual Machine Images supported by the Azure Batch service.
     *
     * @param nextPageLink The NextLink from the previous successful call to List operation.
     * @param accountListSupportedImagesNextOptions Additional parameters for the operation
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the PagedList&lt;ImageInformation&gt; object
     */
    Observable<Page<ImageInformation>> listSupportedImagesNextAsync(final String nextPageLink, final AccountListSupportedImagesNextOptions accountListSupportedImagesNextOptions);

    /**
     * Lists all Virtual Machine Images supported by the Azure Batch service.
     *
     * @param nextPageLink The NextLink from the previous successful call to List operation.
     * @param accountListSupportedImagesNextOptions Additional parameters for the operation
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the PagedList&lt;ImageInformation&gt; object
     */
    Observable<ServiceResponseWithHeaders<Page<ImageInformation>, AccountListSupportedImagesHeaders>> listSupportedImagesNextWithServiceResponseAsync(final String nextPageLink, final AccountListSupportedImagesNextOptions accountListSupportedImagesNextOptions);

    /**
     * Gets the number of Compute Nodes in each state, grouped by Pool. Note that the numbers returned may not always be up to date. If you need exact node counts, use a list query.
     *
     * @param nextPageLink The NextLink from the previous successful call to List operation.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws BatchErrorException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the PagedList&lt;PoolNodeCounts&gt; object if successful.
     */
    PagedList<PoolNodeCounts> listPoolNodeCountsNext(final String nextPageLink);

    /**
     * Gets the number of Compute Nodes in each state, grouped by Pool. Note that the numbers returned may not always be up to date. If you need exact node counts, use a list query.
     *
     * @param nextPageLink The NextLink from the previous successful call to List operation.
     * @param serviceFuture the ServiceFuture object tracking the Retrofit calls
     * @param serviceCallback the async ServiceCallback to handle successful and failed responses.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the {@link ServiceFuture} object
     */
    ServiceFuture<List<PoolNodeCounts>> listPoolNodeCountsNextAsync(final String nextPageLink, final ServiceFuture<List<PoolNodeCounts>> serviceFuture, final ListOperationCallback<PoolNodeCounts> serviceCallback);

    /**
     * Gets the number of Compute Nodes in each state, grouped by Pool. Note that the numbers returned may not always be up to date. If you need exact node counts, use a list query.
     *
     * @param nextPageLink The NextLink from the previous successful call to List operation.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the PagedList&lt;PoolNodeCounts&gt; object
     */
    Observable<Page<PoolNodeCounts>> listPoolNodeCountsNextAsync(final String nextPageLink);

    /**
     * Gets the number of Compute Nodes in each state, grouped by Pool. Note that the numbers returned may not always be up to date. If you need exact node counts, use a list query.
     *
     * @param nextPageLink The NextLink from the previous successful call to List operation.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the PagedList&lt;PoolNodeCounts&gt; object
     */
    Observable<ServiceResponseWithHeaders<Page<PoolNodeCounts>, AccountListPoolNodeCountsHeaders>> listPoolNodeCountsNextWithServiceResponseAsync(final String nextPageLink);
    /**
     * Gets the number of Compute Nodes in each state, grouped by Pool. Note that the numbers returned may not always be up to date. If you need exact node counts, use a list query.
     *
     * @param nextPageLink The NextLink from the previous successful call to List operation.
     * @param accountListPoolNodeCountsNextOptions Additional parameters for the operation
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @throws BatchErrorException thrown if the request is rejected by server
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent
     * @return the PagedList&lt;PoolNodeCounts&gt; object if successful.
     */
    PagedList<PoolNodeCounts> listPoolNodeCountsNext(final String nextPageLink, final AccountListPoolNodeCountsNextOptions accountListPoolNodeCountsNextOptions);

    /**
     * Gets the number of Compute Nodes in each state, grouped by Pool. Note that the numbers returned may not always be up to date. If you need exact node counts, use a list query.
     *
     * @param nextPageLink The NextLink from the previous successful call to List operation.
     * @param accountListPoolNodeCountsNextOptions Additional parameters for the operation
     * @param serviceFuture the ServiceFuture object tracking the Retrofit calls
     * @param serviceCallback the async ServiceCallback to handle successful and failed responses.
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the {@link ServiceFuture} object
     */
    ServiceFuture<List<PoolNodeCounts>> listPoolNodeCountsNextAsync(final String nextPageLink, final AccountListPoolNodeCountsNextOptions accountListPoolNodeCountsNextOptions, final ServiceFuture<List<PoolNodeCounts>> serviceFuture, final ListOperationCallback<PoolNodeCounts> serviceCallback);

    /**
     * Gets the number of Compute Nodes in each state, grouped by Pool. Note that the numbers returned may not always be up to date. If you need exact node counts, use a list query.
     *
     * @param nextPageLink The NextLink from the previous successful call to List operation.
     * @param accountListPoolNodeCountsNextOptions Additional parameters for the operation
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the PagedList&lt;PoolNodeCounts&gt; object
     */
    Observable<Page<PoolNodeCounts>> listPoolNodeCountsNextAsync(final String nextPageLink, final AccountListPoolNodeCountsNextOptions accountListPoolNodeCountsNextOptions);

    /**
     * Gets the number of Compute Nodes in each state, grouped by Pool. Note that the numbers returned may not always be up to date. If you need exact node counts, use a list query.
     *
     * @param nextPageLink The NextLink from the previous successful call to List operation.
     * @param accountListPoolNodeCountsNextOptions Additional parameters for the operation
     * @throws IllegalArgumentException thrown if parameters fail the validation
     * @return the observable to the PagedList&lt;PoolNodeCounts&gt; object
     */
    Observable<ServiceResponseWithHeaders<Page<PoolNodeCounts>, AccountListPoolNodeCountsHeaders>> listPoolNodeCountsNextWithServiceResponseAsync(final String nextPageLink, final AccountListPoolNodeCountsNextOptions accountListPoolNodeCountsNextOptions);

}
