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

package com.azure.resourcemanager.education.models;

import com.azure.core.http.rest.PagedIterable;
import com.azure.core.http.rest.Response;
import com.azure.core.util.Context;

/** Resource collection API of JoinRequests. */
public interface JoinRequests {
    /**
     * get student join requests.
     *
     * @param billingAccountName Billing account name.
     * @param billingProfileName Billing profile name.
     * @param invoiceSectionName Invoice section name.
     * @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 student join requests as paginated response with {@link PagedIterable}.
     */
    PagedIterable<JoinRequestDetails> list(
        String billingAccountName, String billingProfileName, String invoiceSectionName);

    /**
     * get student join requests.
     *
     * @param billingAccountName Billing account name.
     * @param billingProfileName Billing profile name.
     * @param invoiceSectionName Invoice section name.
     * @param includeDenied Include denied.
     * @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 student join requests as paginated response with {@link PagedIterable}.
     */
    PagedIterable<JoinRequestDetails> list(
        String billingAccountName,
        String billingProfileName,
        String invoiceSectionName,
        Boolean includeDenied,
        Context context);

    /**
     * get student join requests.
     *
     * @param billingAccountName Billing account name.
     * @param billingProfileName Billing profile name.
     * @param invoiceSectionName Invoice section name.
     * @param joinRequestName Join name.
     * @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 student join requests along with {@link Response}.
     */
    Response<JoinRequestDetails> getWithResponse(
        String billingAccountName,
        String billingProfileName,
        String invoiceSectionName,
        String joinRequestName,
        Context context);

    /**
     * get student join requests.
     *
     * @param billingAccountName Billing account name.
     * @param billingProfileName Billing profile name.
     * @param invoiceSectionName Invoice section name.
     * @param joinRequestName Join name.
     * @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 student join requests.
     */
    JoinRequestDetails get(
        String billingAccountName, String billingProfileName, String invoiceSectionName, String joinRequestName);

    /**
     * Approve student joining the redeemable lab.
     *
     * @param billingAccountName Billing account name.
     * @param billingProfileName Billing profile name.
     * @param invoiceSectionName Invoice section name.
     * @param joinRequestName Join name.
     * @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 the {@link Response}.
     */
    Response<Void> approveWithResponse(
        String billingAccountName,
        String billingProfileName,
        String invoiceSectionName,
        String joinRequestName,
        Context context);

    /**
     * Approve student joining the redeemable lab.
     *
     * @param billingAccountName Billing account name.
     * @param billingProfileName Billing profile name.
     * @param invoiceSectionName Invoice section name.
     * @param joinRequestName Join name.
     * @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.
     */
    void approve(
        String billingAccountName, String billingProfileName, String invoiceSectionName, String joinRequestName);

    /**
     * Deny student joining the redeemable lab.
     *
     * @param billingAccountName Billing account name.
     * @param billingProfileName Billing profile name.
     * @param invoiceSectionName Invoice section name.
     * @param joinRequestName Join name.
     * @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 the {@link Response}.
     */
    Response<Void> denyWithResponse(
        String billingAccountName,
        String billingProfileName,
        String invoiceSectionName,
        String joinRequestName,
        Context context);

    /**
     * Deny student joining the redeemable lab.
     *
     * @param billingAccountName Billing account name.
     * @param billingProfileName Billing profile name.
     * @param invoiceSectionName Invoice section name.
     * @param joinRequestName Join name.
     * @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.
     */
    void deny(String billingAccountName, String billingProfileName, String invoiceSectionName, String joinRequestName);
}
