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

package com.azure.resourcemanager.managednetworkfabric.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.management.polling.PollResult;
import com.azure.core.util.Context;
import com.azure.core.util.polling.SyncPoller;
import com.azure.resourcemanager.managednetworkfabric.fluent.models.GetDeviceStatusPropertiesInner;
import com.azure.resourcemanager.managednetworkfabric.fluent.models.GetDynamicInterfaceMapsPropertiesItemInner;
import com.azure.resourcemanager.managednetworkfabric.fluent.models.GetStaticInterfaceMapsPropertiesItemInner;
import com.azure.resourcemanager.managednetworkfabric.fluent.models.NetworkDeviceInner;
import com.azure.resourcemanager.managednetworkfabric.fluent.models.SupportPackagePropertiesInner;
import com.azure.resourcemanager.managednetworkfabric.models.NetworkDevicePatchParameters;
import com.azure.resourcemanager.managednetworkfabric.models.UpdatePowerCycleProperties;
import com.azure.resourcemanager.managednetworkfabric.models.UpdateVersionProperties;
import java.util.List;

/** An instance of this class provides access to all the operations defined in NetworkDevicesClient. */
public interface NetworkDevicesClient {
    /**
     * Create Network Device.
     *
     * <p>Create a Network Device resource.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the Network Device.
     * @param body Request payload.
     * @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 SyncPoller} for polling of the NetworkDevice resource definition.
     */
    @ServiceMethod(returns = ReturnType.LONG_RUNNING_OPERATION)
    SyncPoller<PollResult<NetworkDeviceInner>, NetworkDeviceInner> beginCreate(
        String resourceGroupName, String networkDeviceName, NetworkDeviceInner body);

    /**
     * Create Network Device.
     *
     * <p>Create a Network Device resource.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the Network Device.
     * @param body Request payload.
     * @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 SyncPoller} for polling of the NetworkDevice resource definition.
     */
    @ServiceMethod(returns = ReturnType.LONG_RUNNING_OPERATION)
    SyncPoller<PollResult<NetworkDeviceInner>, NetworkDeviceInner> beginCreate(
        String resourceGroupName, String networkDeviceName, NetworkDeviceInner body, Context context);

    /**
     * Create Network Device.
     *
     * <p>Create a Network Device resource.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the Network Device.
     * @param body Request payload.
     * @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 NetworkDevice resource definition.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    NetworkDeviceInner create(String resourceGroupName, String networkDeviceName, NetworkDeviceInner body);

    /**
     * Create Network Device.
     *
     * <p>Create a Network Device resource.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the Network Device.
     * @param body Request payload.
     * @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 NetworkDevice resource definition.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    NetworkDeviceInner create(
        String resourceGroupName, String networkDeviceName, NetworkDeviceInner body, Context context);

    /**
     * Gets a Network Device.
     *
     * <p>Get the Network Device resource details.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the Network Device.
     * @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 Network Device resource details along with {@link Response}.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    Response<NetworkDeviceInner> getByResourceGroupWithResponse(
        String resourceGroupName, String networkDeviceName, Context context);

    /**
     * Gets a Network Device.
     *
     * <p>Get the Network Device resource details.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the Network Device.
     * @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 Network Device resource details.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    NetworkDeviceInner getByResourceGroup(String resourceGroupName, String networkDeviceName);

    /**
     * Updates a Network Device.
     *
     * <p>Update certain properties of the Network Device resource.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the Network Device.
     * @param body Network Device properties to update.
     * @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 SyncPoller} for polling of the NetworkDevice resource definition.
     */
    @ServiceMethod(returns = ReturnType.LONG_RUNNING_OPERATION)
    SyncPoller<PollResult<NetworkDeviceInner>, NetworkDeviceInner> beginUpdate(
        String resourceGroupName, String networkDeviceName, NetworkDevicePatchParameters body);

    /**
     * Updates a Network Device.
     *
     * <p>Update certain properties of the Network Device resource.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the Network Device.
     * @param body Network Device properties to update.
     * @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 SyncPoller} for polling of the NetworkDevice resource definition.
     */
    @ServiceMethod(returns = ReturnType.LONG_RUNNING_OPERATION)
    SyncPoller<PollResult<NetworkDeviceInner>, NetworkDeviceInner> beginUpdate(
        String resourceGroupName, String networkDeviceName, NetworkDevicePatchParameters body, Context context);

    /**
     * Updates a Network Device.
     *
     * <p>Update certain properties of the Network Device resource.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the Network Device.
     * @param body Network Device properties to update.
     * @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 NetworkDevice resource definition.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    NetworkDeviceInner update(String resourceGroupName, String networkDeviceName, NetworkDevicePatchParameters body);

    /**
     * Updates a Network Device.
     *
     * <p>Update certain properties of the Network Device resource.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the Network Device.
     * @param body Network Device properties to update.
     * @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 NetworkDevice resource definition.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    NetworkDeviceInner update(
        String resourceGroupName, String networkDeviceName, NetworkDevicePatchParameters body, Context context);

    /**
     * Deletes a Network Device.
     *
     * <p>Delete the Network Device resource.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the Network Device.
     * @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 SyncPoller} for polling of long-running operation.
     */
    @ServiceMethod(returns = ReturnType.LONG_RUNNING_OPERATION)
    SyncPoller<PollResult<Void>, Void> beginDelete(String resourceGroupName, String networkDeviceName);

    /**
     * Deletes a Network Device.
     *
     * <p>Delete the Network Device resource.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the Network Device.
     * @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 SyncPoller} for polling of long-running operation.
     */
    @ServiceMethod(returns = ReturnType.LONG_RUNNING_OPERATION)
    SyncPoller<PollResult<Void>, Void> beginDelete(String resourceGroupName, String networkDeviceName, Context context);

    /**
     * Deletes a Network Device.
     *
     * <p>Delete the Network Device resource.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the Network Device.
     * @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.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    void delete(String resourceGroupName, String networkDeviceName);

    /**
     * Deletes a Network Device.
     *
     * <p>Delete the Network Device resource.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the Network Device.
     * @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.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    void delete(String resourceGroupName, String networkDeviceName, Context context);

    /**
     * List NetworkDevices by resource group.
     *
     * <p>List all the Network Device resources in a given resource group.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @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 list of NetworkDevices as paginated response with {@link PagedIterable}.
     */
    @ServiceMethod(returns = ReturnType.COLLECTION)
    PagedIterable<NetworkDeviceInner> listByResourceGroup(String resourceGroupName);

    /**
     * List NetworkDevices by resource group.
     *
     * <p>List all the Network Device resources in a given resource group.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @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 list of NetworkDevices as paginated response with {@link PagedIterable}.
     */
    @ServiceMethod(returns = ReturnType.COLLECTION)
    PagedIterable<NetworkDeviceInner> listByResourceGroup(String resourceGroupName, Context context);

    /**
     * List NetworkDevices by subscription.
     *
     * <p>List all the Network Device resources in a given subscription.
     *
     * @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 list of NetworkDevices as paginated response with {@link PagedIterable}.
     */
    @ServiceMethod(returns = ReturnType.COLLECTION)
    PagedIterable<NetworkDeviceInner> list();

    /**
     * List NetworkDevices by subscription.
     *
     * <p>List all the Network Device resources in a given subscription.
     *
     * @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 list of NetworkDevices as paginated response with {@link PagedIterable}.
     */
    @ServiceMethod(returns = ReturnType.COLLECTION)
    PagedIterable<NetworkDeviceInner> list(Context context);

    /**
     * Implements the operation to the underlying resources.
     *
     * <p>Reboot the Network Device.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the NetworkDevice.
     * @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 SyncPoller} for polling of long-running operation.
     */
    @ServiceMethod(returns = ReturnType.LONG_RUNNING_OPERATION)
    SyncPoller<PollResult<Void>, Void> beginReboot(String resourceGroupName, String networkDeviceName);

    /**
     * Implements the operation to the underlying resources.
     *
     * <p>Reboot the Network Device.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the NetworkDevice.
     * @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 SyncPoller} for polling of long-running operation.
     */
    @ServiceMethod(returns = ReturnType.LONG_RUNNING_OPERATION)
    SyncPoller<PollResult<Void>, Void> beginReboot(String resourceGroupName, String networkDeviceName, Context context);

    /**
     * Implements the operation to the underlying resources.
     *
     * <p>Reboot the Network Device.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the NetworkDevice.
     * @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.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    void reboot(String resourceGroupName, String networkDeviceName);

    /**
     * Implements the operation to the underlying resources.
     *
     * <p>Reboot the Network Device.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the NetworkDevice.
     * @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.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    void reboot(String resourceGroupName, String networkDeviceName, Context context);

    /**
     * Restores the configuration to last applied good configuration from Azure.
     *
     * <p>Restore the configuration of the Network Device resource to last known good configuration.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the NetworkDevice.
     * @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 SyncPoller} for polling of long-running operation.
     */
    @ServiceMethod(returns = ReturnType.LONG_RUNNING_OPERATION)
    SyncPoller<PollResult<Void>, Void> beginRestoreConfig(String resourceGroupName, String networkDeviceName);

    /**
     * Restores the configuration to last applied good configuration from Azure.
     *
     * <p>Restore the configuration of the Network Device resource to last known good configuration.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the NetworkDevice.
     * @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 SyncPoller} for polling of long-running operation.
     */
    @ServiceMethod(returns = ReturnType.LONG_RUNNING_OPERATION)
    SyncPoller<PollResult<Void>, Void> beginRestoreConfig(
        String resourceGroupName, String networkDeviceName, Context context);

    /**
     * Restores the configuration to last applied good configuration from Azure.
     *
     * <p>Restore the configuration of the Network Device resource to last known good configuration.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the NetworkDevice.
     * @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.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    void restoreConfig(String resourceGroupName, String networkDeviceName);

    /**
     * Restores the configuration to last applied good configuration from Azure.
     *
     * <p>Restore the configuration of the Network Device resource to last known good configuration.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the NetworkDevice.
     * @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.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    void restoreConfig(String resourceGroupName, String networkDeviceName, Context context);

    /**
     * Implements SKU version upgrade of network device.
     *
     * <p>Update the SKU version of the Network Device resource.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the NetworkDevice.
     * @param body Request payload.
     * @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 SyncPoller} for polling of long-running operation.
     */
    @ServiceMethod(returns = ReturnType.LONG_RUNNING_OPERATION)
    SyncPoller<PollResult<Void>, Void> beginUpdateVersion(
        String resourceGroupName, String networkDeviceName, UpdateVersionProperties body);

    /**
     * Implements SKU version upgrade of network device.
     *
     * <p>Update the SKU version of the Network Device resource.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the NetworkDevice.
     * @param body Request payload.
     * @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 SyncPoller} for polling of long-running operation.
     */
    @ServiceMethod(returns = ReturnType.LONG_RUNNING_OPERATION)
    SyncPoller<PollResult<Void>, Void> beginUpdateVersion(
        String resourceGroupName, String networkDeviceName, UpdateVersionProperties body, Context context);

    /**
     * Implements SKU version upgrade of network device.
     *
     * <p>Update the SKU version of the Network Device resource.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the NetworkDevice.
     * @param body Request payload.
     * @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.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    void updateVersion(String resourceGroupName, String networkDeviceName, UpdateVersionProperties body);

    /**
     * Implements SKU version upgrade of network device.
     *
     * <p>Update the SKU version of the Network Device resource.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the NetworkDevice.
     * @param body Request payload.
     * @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.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    void updateVersion(
        String resourceGroupName, String networkDeviceName, UpdateVersionProperties body, Context context);

    /**
     * Implements the operation to the underlying resources.
     *
     * <p>Generate Support Package for the given Network Device.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the NetworkDevice.
     * @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 SyncPoller} for polling of generate support package post action properties.
     */
    @ServiceMethod(returns = ReturnType.LONG_RUNNING_OPERATION)
    SyncPoller<PollResult<SupportPackagePropertiesInner>, SupportPackagePropertiesInner> beginGenerateSupportPackage(
        String resourceGroupName, String networkDeviceName);

    /**
     * Implements the operation to the underlying resources.
     *
     * <p>Generate Support Package for the given Network Device.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the NetworkDevice.
     * @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 SyncPoller} for polling of generate support package post action properties.
     */
    @ServiceMethod(returns = ReturnType.LONG_RUNNING_OPERATION)
    SyncPoller<PollResult<SupportPackagePropertiesInner>, SupportPackagePropertiesInner> beginGenerateSupportPackage(
        String resourceGroupName, String networkDeviceName, Context context);

    /**
     * Implements the operation to the underlying resources.
     *
     * <p>Generate Support Package for the given Network Device.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the NetworkDevice.
     * @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 generate support package post action properties.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    SupportPackagePropertiesInner generateSupportPackage(String resourceGroupName, String networkDeviceName);

    /**
     * Implements the operation to the underlying resources.
     *
     * <p>Generate Support Package for the given Network Device.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the NetworkDevice.
     * @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 generate support package post action properties.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    SupportPackagePropertiesInner generateSupportPackage(
        String resourceGroupName, String networkDeviceName, Context context);

    /**
     * Implements the operation to the underlying resources.
     *
     * <p>Update PDU power cycle of the Network Device.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the NetworkDevice.
     * @param body Request payload.
     * @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 SyncPoller} for polling of long-running operation.
     */
    @ServiceMethod(returns = ReturnType.LONG_RUNNING_OPERATION)
    SyncPoller<PollResult<Void>, Void> beginUpdatePowerCycle(
        String resourceGroupName, String networkDeviceName, UpdatePowerCycleProperties body);

    /**
     * Implements the operation to the underlying resources.
     *
     * <p>Update PDU power cycle of the Network Device.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the NetworkDevice.
     * @param body Request payload.
     * @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 SyncPoller} for polling of long-running operation.
     */
    @ServiceMethod(returns = ReturnType.LONG_RUNNING_OPERATION)
    SyncPoller<PollResult<Void>, Void> beginUpdatePowerCycle(
        String resourceGroupName, String networkDeviceName, UpdatePowerCycleProperties body, Context context);

    /**
     * Implements the operation to the underlying resources.
     *
     * <p>Update PDU power cycle of the Network Device.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the NetworkDevice.
     * @param body Request payload.
     * @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.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    void updatePowerCycle(String resourceGroupName, String networkDeviceName, UpdatePowerCycleProperties body);

    /**
     * Implements the operation to the underlying resources.
     *
     * <p>Update PDU power cycle of the Network Device.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the NetworkDevice.
     * @param body Request payload.
     * @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.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    void updatePowerCycle(
        String resourceGroupName, String networkDeviceName, UpdatePowerCycleProperties body, Context context);

    /**
     * Gets the running status of the network device.
     *
     * <p>Get the running status of the Network Device.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the NetworkDevice.
     * @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 SyncPoller} for polling of the running status of the Network Device.
     */
    @ServiceMethod(returns = ReturnType.LONG_RUNNING_OPERATION)
    SyncPoller<PollResult<GetDeviceStatusPropertiesInner>, GetDeviceStatusPropertiesInner> beginGetStatus(
        String resourceGroupName, String networkDeviceName);

    /**
     * Gets the running status of the network device.
     *
     * <p>Get the running status of the Network Device.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the NetworkDevice.
     * @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 SyncPoller} for polling of the running status of the Network Device.
     */
    @ServiceMethod(returns = ReturnType.LONG_RUNNING_OPERATION)
    SyncPoller<PollResult<GetDeviceStatusPropertiesInner>, GetDeviceStatusPropertiesInner> beginGetStatus(
        String resourceGroupName, String networkDeviceName, Context context);

    /**
     * Gets the running status of the network device.
     *
     * <p>Get the running status of the Network Device.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the NetworkDevice.
     * @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 running status of the Network Device.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    GetDeviceStatusPropertiesInner getStatus(String resourceGroupName, String networkDeviceName);

    /**
     * Gets the running status of the network device.
     *
     * <p>Get the running status of the Network Device.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the NetworkDevice.
     * @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 running status of the Network Device.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    GetDeviceStatusPropertiesInner getStatus(String resourceGroupName, String networkDeviceName, Context context);

    /**
     * Show the interface maps as per the topology.
     *
     * <p>Get the static interface maps for the given Network Device.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the NetworkDevice.
     * @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 SyncPoller} for polling of the static interface maps for the given Network Device.
     */
    @ServiceMethod(returns = ReturnType.LONG_RUNNING_OPERATION)
    SyncPoller<
            PollResult<List<GetStaticInterfaceMapsPropertiesItemInner>>,
            List<GetStaticInterfaceMapsPropertiesItemInner>>
        beginGetStaticInterfaceMaps(String resourceGroupName, String networkDeviceName);

    /**
     * Show the interface maps as per the topology.
     *
     * <p>Get the static interface maps for the given Network Device.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the NetworkDevice.
     * @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 SyncPoller} for polling of the static interface maps for the given Network Device.
     */
    @ServiceMethod(returns = ReturnType.LONG_RUNNING_OPERATION)
    SyncPoller<
            PollResult<List<GetStaticInterfaceMapsPropertiesItemInner>>,
            List<GetStaticInterfaceMapsPropertiesItemInner>>
        beginGetStaticInterfaceMaps(String resourceGroupName, String networkDeviceName, Context context);

    /**
     * Show the interface maps as per the topology.
     *
     * <p>Get the static interface maps for the given Network Device.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the NetworkDevice.
     * @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 static interface maps for the given Network Device.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    List<GetStaticInterfaceMapsPropertiesItemInner> getStaticInterfaceMaps(
        String resourceGroupName, String networkDeviceName);

    /**
     * Show the interface maps as per the topology.
     *
     * <p>Get the static interface maps for the given Network Device.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the NetworkDevice.
     * @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 static interface maps for the given Network Device.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    List<GetStaticInterfaceMapsPropertiesItemInner> getStaticInterfaceMaps(
        String resourceGroupName, String networkDeviceName, Context context);

    /**
     * Implements the operation to the underlying resources.
     *
     * <p>Get the dynamic interface maps for the given Network Device.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the NetworkDevice.
     * @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 SyncPoller} for polling of the dynamic interface maps for the given Network Device.
     */
    @ServiceMethod(returns = ReturnType.LONG_RUNNING_OPERATION)
    SyncPoller<
            PollResult<List<GetDynamicInterfaceMapsPropertiesItemInner>>,
            List<GetDynamicInterfaceMapsPropertiesItemInner>>
        beginGetDynamicInterfaceMaps(String resourceGroupName, String networkDeviceName);

    /**
     * Implements the operation to the underlying resources.
     *
     * <p>Get the dynamic interface maps for the given Network Device.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the NetworkDevice.
     * @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 SyncPoller} for polling of the dynamic interface maps for the given Network Device.
     */
    @ServiceMethod(returns = ReturnType.LONG_RUNNING_OPERATION)
    SyncPoller<
            PollResult<List<GetDynamicInterfaceMapsPropertiesItemInner>>,
            List<GetDynamicInterfaceMapsPropertiesItemInner>>
        beginGetDynamicInterfaceMaps(String resourceGroupName, String networkDeviceName, Context context);

    /**
     * Implements the operation to the underlying resources.
     *
     * <p>Get the dynamic interface maps for the given Network Device.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the NetworkDevice.
     * @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 dynamic interface maps for the given Network Device.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    List<GetDynamicInterfaceMapsPropertiesItemInner> getDynamicInterfaceMaps(
        String resourceGroupName, String networkDeviceName);

    /**
     * Implements the operation to the underlying resources.
     *
     * <p>Get the dynamic interface maps for the given Network Device.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param networkDeviceName Name of the NetworkDevice.
     * @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 dynamic interface maps for the given Network Device.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    List<GetDynamicInterfaceMapsPropertiesItemInner> getDynamicInterfaceMaps(
        String resourceGroupName, String networkDeviceName, Context context);
}
