# --------------------------------------------------------------------------
# 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.
# Changes may cause incorrect behavior and will be lost if the code is
# regenerated.
# --------------------------------------------------------------------------
# pylint: disable=too-many-lines
# pylint: disable=too-many-statements
# pylint: disable=line-too-long

from azure.cli.core.commands.parameters import (
    get_three_state_flag,
    get_enum_type,
    resource_group_name_type
)
from azure.cli.core.commands.validators import validate_file_or_dict
from azext_providerhub.action import (
    AddCanaryRegion,
    AddDefaultRolloutROW2,
    AddProviderAuthentication,
    AddProviderAuthorizations,
    AddCapabilities,
    AddSkipRegions,
    AddTemplateDeploymentOptions,
    AddResourceTypeEndpointProperties,
    AddSubscriptionStateOverrideActions,
    AddProviderHubMetadataProviderAuthorizations,
    AddProviderHubMetadataAuthentication,
    AddAuthorizations,
    AddNotificationEndpoints,
    AddSwaggerSpecifications,
    AddAuthorizationActionMappings,
    AddLinkedAccessChecks,
    AddThrottlingRules,
    AddIdentityManagement,
    AddCheckNameAvailabilitySpecifications,
    AddServiceTreeInfos,
    AddSubscriptionStateRules,
    AddExtendedLocations,
    AddResourceMovePolicy,
    AddRequiredFeatures,
    AddExtensionOptions,
    AddResourcePatchBegin,
    AddLoggingRules
)


def load_arguments(self, _):

    with self.argument_context('providerhub custom-rollout list') as c:
        c.argument('provider_namespace', type=str,
                   help='The name of the resource provider hosted within ProviderHub.')

    with self.argument_context('providerhub custom-rollout show') as c:
        c.argument('provider_namespace', type=str, help='The name of the resource provider hosted within ProviderHub.',
                   id_part='name')
        c.argument('rollout_name', type=str,
                   help='The rollout name.', id_part='child_name_1')

    with self.argument_context('providerhub custom-rollout create') as c:
        c.argument('provider_namespace', type=str,
                   help='The name of the resource provider hosted within ProviderHub.')
        c.argument('rollout_name', type=str, help='The rollout name.')
        c.argument('canary', action=AddCanaryRegion, nargs='+',
                   help='The canary regions to apply the manifest.', arg_group='Specification')

    with self.argument_context('providerhub custom-rollout update') as c:
        c.argument('provider_namespace', type=str,
                   help='The name of the resource provider hosted within ProviderHub.')
        c.argument('rollout_name', type=str, help='The rollout name.')
        c.argument('canary', action=AddCanaryRegion, nargs='+',
                   help='The canary regions to apply the manifest.', arg_group='Specification')

    with self.argument_context('providerhub default-rollout list') as c:
        c.argument('provider_namespace', type=str,
                   help='The name of the resource provider hosted within ProviderHub.')

    with self.argument_context('providerhub default-rollout show') as c:
        c.argument('provider_namespace', type=str, help='The name of the resource provider hosted within ProviderHub.',
                   id_part='name')
        c.argument('rollout_name', type=str,
                   help='The rollout name.', id_part='child_name_1')

    with self.argument_context('providerhub default-rollout create') as c:
        c.argument('provider_namespace', type=str,
                   help='The name of the resource provider hosted within ProviderHub.')
        c.argument('rollout_name', type=str, help='The rollout name.')
        c.argument('rest_of_the_world_group_two', options_list=['--rest-of-the-world-group-two', '--row2'], action=AddDefaultRolloutROW2,
                   nargs='+', help='DefaultRollout rest of the world group two.')
        c.argument('canary', action=AddCanaryRegion,
                   nargs='*', help='The canary regions to skip.')

    with self.argument_context('providerhub default-rollout update') as c:
        c.argument('provider_namespace', type=str,
                   help='The name of the resource provider hosted within ProviderHub.')
        c.argument('rollout_name', type=str, help='The rollout name.')
        c.argument('rest_of_the_world_group_two', options_list=['--rest-of-the-world-group-two', '--row2'], action=AddDefaultRolloutROW2,
                   nargs='+', help='DefaultRollout rest of the world group two.')
        c.argument('canary', action=AddCanaryRegion,
                   nargs='*', help='The canary regions to skip.')

    with self.argument_context('providerhub default-rollout delete') as c:
        c.argument('provider_namespace', type=str, help='The name of the resource provider hosted within ProviderHub.',
                   id_part='name')
        c.argument('rollout_name', type=str,
                   help='The rollout name.', id_part='child_name_1')

    with self.argument_context('providerhub default-rollout stop') as c:
        c.argument('provider_namespace', type=str, help='The name of the resource provider hosted within ProviderHub.',
                   id_part='name')
        c.argument('rollout_name', type=str,
                   help='The rollout name.', id_part='child_name_1')

    with self.argument_context('providerhub default-rollout wait') as c:
        c.argument('provider_namespace', type=str, help='The name of the resource provider hosted within ProviderHub.',
                   id_part='name')
        c.argument('rollout_name', type=str,
                   help='The rollout name.', id_part='child_name_1')

    with self.argument_context('providerhub manifest checkin') as c:
        c.argument('provider_namespace', type=str, help='The name of the resource provider hosted within ProviderHub.',
                   id_part='name')
        c.argument('environment', type=str,
                   help='The environment supplied to the checkin manifest operation.')
        c.argument('baseline_arm_manifest_location', options_list=['--baseline-arm-manifest-location', '--arm-manifest-location', '--location'], type=str, help='The baseline ARM manifest location supplied to '
                   'the checkin manifest operation.')

    with self.argument_context('providerhub manifest generate') as c:
        c.argument('provider_namespace', type=str, help='The name of the resource provider hosted within ProviderHub.',
                   id_part='name')

    with self.argument_context('providerhub notification-registration list') as c:
        c.argument('provider_namespace', type=str,
                   help='The name of the resource provider hosted within ProviderHub.')

    with self.argument_context('providerhub notification-registration show') as c:
        c.argument('provider_namespace', type=str, help='The name of the resource provider hosted within ProviderHub.',
                   id_part='name')
        c.argument('notification_registration_name', options_list=['--name', '-n', '--notification-registration-name'],
                   type=str, help='The notification registration.', id_part='child_name_1')

    with self.argument_context('providerhub notification-registration create') as c:
        c.argument('provider_namespace', type=str,
                   help='The name of the resource provider hosted within ProviderHub.')
        c.argument('notification_registration_name', options_list=['--name', '-n', '--notification-registration-name'],
                   type=str, help='The notification registration.')
        c.argument('notification_mode', arg_type=get_enum_type(
            ['NotSpecified', 'EventHub', 'WebHook']), help='Determines how the notifications are sent to the RP. The two available modes are EventHub and Webhook.')
        c.argument('message_scope', arg_type=get_enum_type(
            ['NotSpecified', 'RegisteredSubscriptions']), help='Limits the messages that are sent to the RP. The default value is RegisteredSubscriptions. The available values are Global (all messages in Azure) and RegisteredSubscriptions (only messages in subscriptions registered by RP).')
        c.argument('included_events', nargs='+',
                   help='These are the events that the RP should be messaged on. The message format is in the form {RP Namespace}/{Resource Type}/{action}. The availabe actions are: write, delete and move/action.')
        c.argument('notification_endpoints',
                   action=AddNotificationEndpoints, nargs='+', help='These are the locations for the notification messages. Notifications will be sent to the region of the event resource\'s location (e.g. VM in East Us will send message to the specified endpoint in East US).')

    with self.argument_context('providerhub notification-registration update') as c:
        c.argument('provider_namespace', type=str,
                   help='The name of the resource provider hosted within ProviderHub.')
        c.argument('notification_registration_name', options_list=['--name', '-n', '--notification-registration-name'],
                   type=str, help='The notification registration.')
        c.argument('notification_mode', arg_type=get_enum_type(
            ['NotSpecified', 'EventHub', 'WebHook']), help='Determines how the notifications are sent to the RP. The two available modes are EventHub and Webhook.')
        c.argument('message_scope', arg_type=get_enum_type(
            ['NotSpecified', 'RegisteredSubscriptions']), help='Limits the messages that are sent to the RP. The default value is RegisteredSubscriptions. The available values are Global (all messages in Azure) and RegisteredSubscriptions (only messages in subscriptions registered by RP).')
        c.argument('included_events', nargs='+',
                   help='These are the events that the RP should be messaged on. The message format is in the form {RP Namespace}/{Resource Type}/{action}. The availabe actions are: write, delete and move/action.')
        c.argument('notification_endpoints',
                   action=AddNotificationEndpoints, nargs='+', help='These are the locations for the notification messages. Notifications will be sent to the region of the event resource\'s location (e.g. VM in East Us will send message to the specified endpoint in East US).')

    with self.argument_context('providerhub notification-registration delete') as c:
        c.argument('provider_namespace', type=str, help='The name of the resource provider hosted within ProviderHub.',
                   id_part='name')
        c.argument('notification_registration_name', options_list=['--name', '-n', '--notification-registration-name'],
                   type=str, help='The notification registration.', id_part='child_name_1')

    with self.argument_context('providerhub operation list') as c:
        c.argument('provider_namespace', type=str,
                   help='The name of the resource provider hosted within ProviderHub.')

    with self.argument_context('providerhub operation create') as c:
        c.argument('provider_namespace', type=str,
                   help='The name of the resource provider hosted within ProviderHub.')
        c.argument('contents', type=validate_file_or_dict,
                   help=' Expected value: json-string/@json-file.')

    with self.argument_context('providerhub operation update') as c:
        c.argument('provider_namespace', type=str,
                   help='The name of the resource provider hosted within ProviderHub.')
        c.argument('contents', type=validate_file_or_dict,
                   help=' Expected value: json-string/@json-file.')

    with self.argument_context('providerhub operation delete') as c:
        c.argument('provider_namespace', type=str, help='The name of the resource provider hosted within ProviderHub.',
                   id_part='name')

    with self.argument_context('providerhub provider-registration show') as c:
        c.argument('provider_namespace', type=str, help='The name of the resource provider hosted within ProviderHub.',
                   id_part='name')

    with self.argument_context('providerhub provider-registration create') as c:
        c.argument('provider_namespace', type=str,
                   help='The name of the resource provider hosted within ProviderHub.')
        c.argument('provider_authentication', options_list=['--provider-authentication', '--provider-authn'], action=AddProviderAuthentication, nargs='+',
                   help='Used to set alternative "audiences or resources" that ARM should accept from the token while authenticating requests for the provider. Only available to tenant level providers.')
        c.argument('provider_authorizations', options_list=['--provider-authorizations', '--provider-authz'], action=AddProviderAuthorizations,
                   nargs='+', help='The resource provider authorizations.')
        c.argument('provider_version', type=str,
                   help='The provider version. 2.0 is the only supported version.')
        c.argument('provider_type', type=str, help='Value can be "Internal", "External", "Hidden", "RegistrationFree", "TenantOnly" or "LegacyRegistrationRequired". RegistrationFree is for providers that do not need subscriptions to explicitly register to use the provider. Hidden flag ensures that discovery APIs (GET /Providers) will not show the provider, however a user can still write to the provider explicitly. TenantOnly will not appear in Get /Providers and will not allow registration from users. LegacyRegistrationRequired is for legacy providers that need RDFE registration in addition to ARM registration.')
        c.argument('capabilities', action=AddCapabilities, nargs='+', help='Allow the access to the resource provider from a restrictive subscription quota (DreamSpark_2015-02-01 and CSP_2015-05-01​). The required​Features array is optional, if specified the subscription should meet the quota ​and at least one of the features. If no capabilities is specified the provider will be available to every subscription but the restrictive quotas. New providers are required to allow CSP_2015-05-01​​')
        c.argument('metadata', type=validate_file_or_dict,
                   help='The metadata.')
        c.argument('template_deployment_options', options_list=['--template-deployment-options', '--tmplt-deploy-opt'], action=AddTemplateDeploymentOptions,
                   nargs='+', help='The field for preflight options.')
        c.argument('schema_owners', nargs='+',
                   help='Specifies an array of needed ACIS claims to modify the resource provider schema via ACIS.', arg_group='Management')
        c.argument('manifest_owners', nargs='+',
                   help='Specifies an array of required ACIS claims to modify the resource provider\'s manifest content via ACIS.', arg_group='Management')
        c.argument('required_features', nargs='+',
                   help='The required features.', arg_group='Management')
        c.argument('incident_routing_service', options_list=['--incident-routing-service', '--incident-service'], type=str,
                   help='The Service in IcM when creating or transferring incidents to the RP.', arg_group='Management')
        c.argument('incident_routing_team', options_list=['--incident-routing-team', '--incident-team'], type=str,
                   help='The Team in IcM when creating or transferring incidents to the RP.', arg_group='Management')
        c.argument('incident_contact_email', type=str,
                   help='The email address of contacts for incidents related to the RP.', arg_group='Management')
        c.argument('service_tree_infos', action=AddServiceTreeInfos, nargs='+', help='The ServiceTree information for the resource provider.',
                   arg_group='Management')
        c.argument('resource_access_policy', arg_type=get_enum_type(['NotSpecified', 'AcisReadAllowed',
                                                                     'AcisActionAllowed']), help='The resource access policy.',
                   arg_group='Management')
        c.argument('resource_access_roles', type=validate_file_or_dict,
                   help='The resource access roles. Expected value: json-string/@json-file.', arg_group='Management')
        c.argument('opt_in_headers', arg_type=get_enum_type(['NotSpecified', 'SignedUserToken',
                                                             'ClientGroupMembership', 'SignedAuxiliaryTokens',
                                                             'UnboundedClientGroupMembership']), help='ARM allows customized headers when sending requests to the RP. This can be done both at the provider level or at the individual resource type level.',
                   arg_group='Request Header Options')
        c.argument('required_features_policy', options_list=['--required-features-policy', '--req-features-policy'], arg_type=get_enum_type(['Any', 'All']), help='The accepted values are "Any" or "All". If the value is "All", then only the subscriptions registered to all the corresponding feature flag will be allowed.​', arg_group='Features '
                   'Rule')
        c.argument('subscription_state_override_actions', options_list=['--subscription-state-override-actions', '--override-actions'], action=AddSubscriptionStateOverrideActions, nargs='+',
                   help='The subscription state override actions.', arg_group='Subscription Lifecycle Notification Specifications')
        c.argument('soft_delete_ttl', help='The soft delete time to live.',
                   arg_group='Subscription Lifecycle Notification Specifications')
        c.argument('providerhub_metadata_authorizations', options_list=['--providerhub-metadata-authorizations', '--metadata-authz'],
                   action=AddProviderHubMetadataProviderAuthorizations, nargs='+', help='Available only for first party providers, this section can be used to bootstrap Service-to-Service authentication and authorization for the provider\'s application. When set, it would allow provider to access users\' subscription registered with them.', arg_group='Provider Hub Metadata')
        c.argument('providerhub_metadata_authentication', options_list=['--providerhub-metadata-authentication', '--metadata-authn'], action=AddProviderHubMetadataAuthentication, nargs='+', help='Used to set alternative "audiences or resources" that ARM should accept from the token while authenticating requests for the provider. Only available to tenant level providers.',
                   arg_group='Provider Hub Metadata')
        c.argument('lighthouse_authorizations', options_list=['--lighthouse-authorizations', '--lighthouse-auth'], action=AddAuthorizations, nargs='+', help='The lighthouse authorizations.', arg_group='Provider Hub Metadata '
                   'Third Party Provider Authorization')
        c.argument('managed_by_tenant_id', type=str, help='The managed by tenant identifier.', arg_group='Provider Hub Metadata Third Party Provider '
                   'Authorization')

    with self.argument_context('providerhub provider-registration update') as c:
        c.argument('provider_namespace', type=str,
                   help='The name of the resource provider hosted within ProviderHub.')
        c.argument('provider_authentication', options_list=['--provider-authentication', '--provider-authn'], action=AddProviderAuthentication, nargs='+',
                   help='Used to set alternative "audiences or resources" that ARM should accept from the token while authenticating requests for the provider. Only available to tenant level providers.')
        c.argument('provider_authorizations', options_list=['--provider-authorizations', '--provider-authz'], action=AddProviderAuthorizations,
                   nargs='+', help='The resource provider authorizations.')
        c.argument('provider_version', type=str,
                   help='The provider version. 2.0 is the only supported version.')
        c.argument('provider_type', type=str, help='Value can be "Internal", "External", "Hidden", "RegistrationFree", "TenantOnly" or "LegacyRegistrationRequired". RegistrationFree is for providers that do not need subscriptions to explicitly register to use the provider. Hidden flag ensures that discovery APIs (GET /Providers) will not show the provider, however a user can still write to the provider explicitly. TenantOnly will not appear in Get /Providers and will not allow registration from users. LegacyRegistrationRequired is for legacy providers that need RDFE registration in addition to ARM registration.')
        c.argument('capabilities', action=AddCapabilities, nargs='+', help='Allow the access to the resource provider from a restrictive subscription quota (DreamSpark_2015-02-01 and CSP_2015-05-01​). The required​Features array is optional, if specified the subscription should meet the quota ​and at least one of the features. If no capabilities is specified the provider will be available to every subscription but the restrictive quotas. New providers are required to allow CSP_2015-05-01​​')
        c.argument('metadata', type=validate_file_or_dict,
                   help='The metadata.')
        c.argument('template_deployment_options', options_list=['--template-deployment-options', '--tmplt-deploy-opt'], action=AddTemplateDeploymentOptions,
                   nargs='+', help='The field for preflight options.')
        c.argument('schema_owners', nargs='+',
                   help='Specifies an array of needed ACIS claims to modify the resource provider schema via ACIS.', arg_group='Management')
        c.argument('manifest_owners', nargs='+',
                   help='Specifies an array of required ACIS claims to modify the resource provider\'s manifest content via ACIS.', arg_group='Management')
        c.argument('required_features', nargs='+',
                   help='The required features.', arg_group='Management')
        c.argument('incident_routing_service', options_list=['--incident-routing-service', '--incident-service'], type=str,
                   help='The Service in IcM when creating or transferring incidents to the RP.', arg_group='Management')
        c.argument('incident_routing_team', options_list=['--incident-routing-team', '--incident-team'], type=str,
                   help='The Team in IcM when creating or transferring incidents to the RP.', arg_group='Management')
        c.argument('incident_contact_email', type=str,
                   help='The email address of contacts for incidents related to the RP.', arg_group='Management')
        c.argument('service_tree_infos', action=AddServiceTreeInfos, nargs='+', help='The ServiceTree information for the resource provider.',
                   arg_group='Management')
        c.argument('resource_access_policy', arg_type=get_enum_type(['NotSpecified', 'AcisReadAllowed',
                                                                     'AcisActionAllowed']), help='The resource access policy.',
                   arg_group='Management')
        c.argument('resource_access_roles', type=validate_file_or_dict,
                   help='The resource access roles. Expected value: json-string/@json-file.', arg_group='Management')
        c.argument('opt_in_headers', arg_type=get_enum_type(['NotSpecified', 'SignedUserToken',
                                                             'ClientGroupMembership', 'SignedAuxiliaryTokens',
                                                             'UnboundedClientGroupMembership']), help='ARM allows customized headers when sending requests to the RP. This can be done both at the provider level or at the individual resource type level.',
                   arg_group='Request Header Options')
        c.argument('required_features_policy', options_list=['--required-features-policy', '--req-features-policy'], arg_type=get_enum_type(['Any', 'All']), help='The accepted values are "Any" or "All". If the value is "All", then only the subscriptions registered to all the corresponding feature flag will be allowed.​', arg_group='Features '
                   'Rule')
        c.argument('subscription_state_override_actions', options_list=['--subscription-state-override-actions', '--override-actions'], action=AddSubscriptionStateOverrideActions, nargs='+',
                   help='The subscription state override actions.', arg_group='Subscription Lifecycle Notification Specifications')
        c.argument('soft_delete_ttl', help='The soft delete time to live.',
                   arg_group='Subscription Lifecycle Notification Specifications')
        c.argument('providerhub_metadata_authorizations', options_list=['--providerhub-metadata-authorizations', '--metadata-authz'],
                   action=AddProviderHubMetadataProviderAuthorizations, nargs='+', help='Available only for first party providers, this section can be used to bootstrap Service-to-Service authentication and authorization for the provider\'s application. When set, it would allow provider to access users\' subscription registered with them.', arg_group='Provider Hub Metadata')
        c.argument('providerhub_metadata_authentication', options_list=['--providerhub-metadata-authentication', '--metadata-authn'], action=AddProviderHubMetadataAuthentication, nargs='+', help='Used to set alternative "audiences or resources" that ARM should accept from the token while authenticating requests for the provider. Only available to tenant level providers.',
                   arg_group='Provider Hub Metadata')
        c.argument('lighthouse_authorizations', options_list=['--lighthouse-authorizations', '--lighthouse-auth'], action=AddAuthorizations, nargs='+', help='The lighthouse authorizations.', arg_group='Provider Hub Metadata '
                   'Third Party Provider Authorization')
        c.argument('managed_by_tenant_id', type=str, help='The managed by tenant identifier.', arg_group='Provider Hub Metadata Third Party Provider '
                   'Authorization')

    with self.argument_context('providerhub provider-registration delete') as c:
        c.argument('provider_namespace', type=str, help='The name of the resource provider hosted within ProviderHub.',
                   id_part='name')

    with self.argument_context('providerhub provider-registration generate-operation') as c:
        c.argument('provider_namespace', type=str, help='The name of the resource provider hosted within ProviderHub.',
                   id_part='name')

    with self.argument_context('providerhub provider-registration wait') as c:
        c.argument('provider_namespace', type=str, help='The name of the resource provider hosted within ProviderHub.',
                   id_part='name')

    with self.argument_context('providerhub resource-type-registration list') as c:
        c.argument('provider_namespace', type=str,
                   help='The name of the resource provider hosted within ProviderHub.')

    with self.argument_context('providerhub resource-type-registration show') as c:
        c.argument('provider_namespace', type=str, help='The name of the resource provider hosted within ProviderHub.',
                   id_part='name')
        c.argument('resource_type', type=str,
                   help='The resource type.', id_part='child_name_1')

    with self.argument_context('providerhub resource-type-registration create') as c:
        c.argument('provider_namespace', type=str,
                   help='The name of the resource provider hosted within ProviderHub.')
        c.argument('resource_type', type=str, help='The resource type.')
        c.argument('routing_type', type=str, help='The resource routing type.')
        c.argument('regionality', arg_type=get_enum_type(
            ['NotSpecified', 'Global', 'Regional']), help='The regionality of the resource type.')
        c.argument('endpoints', action=AddResourceTypeEndpointProperties, nargs='+', help='The resource '
                   'type endpoint properties.')
        c.argument('marketplace_type', arg_type=get_enum_type(
            ['NotSpecified', 'AddOn', 'Bypass', 'Store']), help='The resource type behavior in the marketplace.')
        c.argument('swagger_specifications', action=AddSwaggerSpecifications, nargs='+',
                   help='The OpenAPI (swagger specs) of the resource type. RPaaS will use the swagger specs to validate http requests/responses.')
        c.argument('allowed_unauthorized_actions', options_list=['--allowed-unauthorized-actions', '--aua'], nargs='+',
                   help='The allowed unauthorized actions.')
        c.argument('authorization_action_mappings', options_list=['--authorization-action-mappings', '--auth-mappings'], action=AddAuthorizationActionMappings,
                   nargs='+', help='Allows RP to override action verb for RBAC purposes at ARM.')
        c.argument('linked_access_checks', action=AddLinkedAccessChecks, nargs='+',
                   help='Enables additional Role Based Access Control (RBAC) checks on related resources.')
        c.argument('default_api_version', type=str,
                   help='The default API version for the endpoint.')
        c.argument('logging_rules', type=AddLoggingRules,
                   help='Enables additional event logs RP wants customers to see in their subscription for a particular action.')
        c.argument('throttling_rules', action=AddThrottlingRules, nargs='+',
                   help='Allows RPs to set individual limits for different actions in terms of number of requests or number of resources (for collection read requests only).')
        c.argument('enable_async_operation',
                   arg_type=get_three_state_flag(), help='The flag to enable async operation.')
        c.argument('enable_third_party_s2s',
                   arg_type=get_three_state_flag(), help='The flag to enable Third Party S2S.')
        c.argument('is_pure_proxy', arg_type=get_three_state_flag(),
                   help='The flag to indicate a pure proxy resource.')
        c.argument('identity_management',
                   action=AddIdentityManagement, nargs='+', help='The Managed Identity Support.')
        c.argument('check_name_availability_specifications', options_list=['--check-name-availability-specifications', '--checkname-specs'], action=AddCheckNameAvailabilitySpecifications, nargs='+',
                   help='The checkname availability specifications.')
        c.argument('disallowed_action_verbs', options_list=[
                   '--disallowed-action-verbs', '--dav'], nargs='+', help='The disallowed action verbs.')
        c.argument('service_tree_infos',
                   action=AddServiceTreeInfos, nargs='+', help='The service tree infos.')
        c.argument('subscription_state_rules', options_list=['--subscription-state-rules', '--sub-state-rules'],
                   action=AddSubscriptionStateRules, nargs='+', help='The subscription state rules.')
        c.argument('template_deployment_options', options_list=['--template-deployment-options', '--tmplt-deploy-opt'],
                   action=AddTemplateDeploymentOptions, nargs='+', help='The template deployment options.')
        c.argument('extended_locations',
                   action=AddExtendedLocations, nargs='+', help='The extended locations.')
        c.argument('resource_move_policy',
                   action=AddResourceMovePolicy, nargs='+', help='The resource move policy.')
        c.argument('resource_deletion_policy', options_list=['--resource-deletion-policy', '--deletion-policy'], arg_type=get_enum_type(['NotSpecified', 'CascadeDeleteAll',
                                                                                                                                        'CascadeDeleteProxyOnlyChildren']), help='The resource deletion policy.')
        c.argument('opt_in_headers', arg_type=get_enum_type(['NotSpecified', 'SignedUserToken',
                                                             'ClientGroupMembership', 'SignedAuxiliaryTokens',
                                                             'UnboundedClientGroupMembership']), help='The opt in headers.',
                   arg_group='Request Header Options')
        c.argument('subscription_state_override_actions', options_list=['--subscription-state-override-actions', '--override-actions'], action=AddSubscriptionStateOverrideActions, nargs='+',
                   help='The subscription state override action.', arg_group='Subscription Lifecycle Notification Specifications')
        c.argument('soft_delete_ttl', help='The soft delete time to live.',
                   arg_group='Subscription Lifecycle Notification Specifications')
        c.argument('required_features_policy', options_list=['--required-features-policy', '--req-features-policy'], arg_type=get_enum_type(['Any', 'All']), help='The required features policy.', arg_group='Features '
                   'Rule')
        c.argument('resource_creation_begin', options_list=['--resource-creation-begin', '--creation-begin'], action=AddExtensionOptions, nargs='+', help='The resource creation begin extion option.',
                   arg_group='Extension Options')
        c.argument('resource_patch_begin', options_list=['--resource-patch-begin', '--patch-begin'], action=AddExtensionOptions, nargs='+', help='The resource patch begin extion option.',
                   arg_group='Extension Options')

    with self.argument_context('providerhub resource-type-registration update') as c:
        c.argument('provider_namespace', type=str,
                   help='The name of the resource provider hosted within ProviderHub.')
        c.argument('resource_type', type=str, help='The resource type.')
        c.argument('routing_type', type=str, help='The resource routing type.')
        c.argument('regionality', arg_type=get_enum_type(
            ['NotSpecified', 'Global', 'Regional']), help='The regionality of the resource type.')
        c.argument('endpoints', action=AddResourceTypeEndpointProperties, nargs='+', help='The resource '
                   'type endpoint properties.')
        c.argument('marketplace_type', arg_type=get_enum_type(
            ['NotSpecified', 'AddOn', 'Bypass', 'Store']), help='The resource type behavior in the marketplace.')
        c.argument('swagger_specifications', action=AddSwaggerSpecifications, nargs='+',
                   help='The OpenAPI (swagger specs) of the resource type. RPaaS will use the swagger specs to validate http requests/responses.')
        c.argument('allowed_unauthorized_actions', options_list=['--allowed-unauthorized-actions', '--aua'], nargs='+',
                   help='The allowed unauthorized actions.')
        c.argument('authorization_action_mappings', options_list=['--authorization-action-mappings', '--auth-mappings'], action=AddAuthorizationActionMappings,
                   nargs='+', help='Allows RP to override action verb for RBAC purposes at ARM.')
        c.argument('linked_access_checks', action=AddLinkedAccessChecks, nargs='+',
                   help='Enables additional Role Based Access Control (RBAC) checks on related resources.')
        c.argument('default_api_version', type=str,
                   help='The default API version for the endpoint.')
        c.argument('logging_rules', type=AddLoggingRules,
                   help='Enables additional event logs RP wants customers to see in their subscription for a particular action.')
        c.argument('throttling_rules', action=AddThrottlingRules, nargs='+',
                   help='Allows RPs to set individual limits for different actions in terms of number of requests or number of resources (for collection read requests only).')
        c.argument('enable_async_operation',
                   arg_type=get_three_state_flag(), help='The flag to enable async operation.')
        c.argument('enable_third_party_s2s',
                   arg_type=get_three_state_flag(), help='The flag to enable Third Party S2S.')
        c.argument('is_pure_proxy', arg_type=get_three_state_flag(),
                   help='The flag to indicate a pure proxy resource.')
        c.argument('identity_management',
                   action=AddIdentityManagement, nargs='+', help='The Managed Identity Support.')
        c.argument('check_name_availability_specifications', options_list=['--check-name-availability-specifications', '--checkname-specs'], action=AddCheckNameAvailabilitySpecifications, nargs='+',
                   help='The checkname availability specifications.')
        c.argument('disallowed_action_verbs', options_list=[
                   '--disallowed-action-verbs', '--dav'], nargs='+', help='The disallowed action verbs.')
        c.argument('service_tree_infos',
                   action=AddServiceTreeInfos, nargs='+', help='The service tree infos.')
        c.argument('subscription_state_rules', options_list=['--subscription-state-rules', '--sub-state-rules'],
                   action=AddSubscriptionStateRules, nargs='+', help='The subscription state rules.')
        c.argument('template_deployment_options', options_list=['--template-deployment-options', '--tmplt-deploy-opt'],
                   action=AddTemplateDeploymentOptions, nargs='+', help='The template deployment options.')
        c.argument('extended_locations',
                   action=AddExtendedLocations, nargs='+', help='The extended locations.')
        c.argument('resource_move_policy',
                   action=AddResourceMovePolicy, nargs='+', help='The resource move policy.')
        c.argument('resource_deletion_policy', options_list=['--resource-deletion-policy', '--deletion-policy'], arg_type=get_enum_type(['NotSpecified', 'CascadeDeleteAll',
                                                                                                                                        'CascadeDeleteProxyOnlyChildren']), help='The resource deletion policy.')
        c.argument('opt_in_headers', arg_type=get_enum_type(['NotSpecified', 'SignedUserToken',
                                                             'ClientGroupMembership', 'SignedAuxiliaryTokens',
                                                             'UnboundedClientGroupMembership']), help='The opt in headers.',
                   arg_group='Request Header Options')
        c.argument('subscription_state_override_actions', options_list=['--subscription-state-override-actions', '--override-actions'], action=AddSubscriptionStateOverrideActions, nargs='+',
                   help='The subscription state override action.', arg_group='Subscription Lifecycle Notification Specifications')
        c.argument('soft_delete_ttl', help='The soft delete time to live.',
                   arg_group='Subscription Lifecycle Notification Specifications')
        c.argument('required_features_policy', options_list=['--required-features-policy', '--req-features-policy'], arg_type=get_enum_type(['Any', 'All']), help='The required features policy.', arg_group='Features '
                   'Rule')
        c.argument('resource_creation_begin', options_list=['--resource-creation-begin', '--creation-begin'], action=AddExtensionOptions, nargs='+', help='The resource creation begin extion option.',
                   arg_group='Extension Options')
        c.argument('resource_patch_begin', options_list=['--resource-patch-begin', '--patch-begin'], action=AddExtensionOptions, nargs='+', help='The resource patch begin extion option.',
                   arg_group='Extension Options')

    with self.argument_context('providerhub resource-type-registration delete') as c:
        c.argument('provider_namespace', type=str, help='The name of the resource provider hosted within ProviderHub.',
                   id_part='name')
        c.argument('resource_type', type=str,
                   help='The resource type.', id_part='child_name_1')

    with self.argument_context('providerhub resource-type-registration wait') as c:
        c.argument('provider_namespace', type=str, help='The name of the resource provider hosted within ProviderHub.',
                   id_part='name')
        c.argument('resource_type', type=str,
                   help='The resource type.', id_part='child_name_1')

    with self.argument_context('providerhub sku list') as c:
        c.argument('provider_namespace', type=str,
                   help='The name of the resource provider hosted within ProviderHub.')
        c.argument('resource_type', type=str, help='The resource type.')
        c.argument('nested_resource_type_first', options_list=['--nested-first', '--nested-resource-type-first'], type=str,
                   help='The first child resource type.')
        c.argument('nested_resource_type_second', options_list=['--nested-second', '--nested-resource-type-second'], type=str,
                   help='The second child resource type.')
        c.argument('nested_resource_type_third', options_list=['--nested-third', '--nested-resource-type-third'], type=str,
                   help='The third child resource type.')

    with self.argument_context('providerhub sku show') as c:
        c.argument('provider_namespace', type=str, help='The name of the resource provider hosted within ProviderHub.',
                   id_part='name')
        c.argument('resource_type', type=str,
                   help='The resource type.', id_part='child_name_1')
        c.argument('sku', type=str, help='The SKU.', id_part='child_name_2')

    with self.argument_context('providerhub sku create') as c:
        c.argument('provider_namespace', type=str,
                   help='The name of the resource provider hosted within ProviderHub.')
        c.argument('resource_type', type=str, help='The resource type.')
        c.argument('nested_resource_type_first', options_list=['--nested-first', '--nested-resource-type-first'], type=str,
                   help='The first child resource type.')
        c.argument('nested_resource_type_second', options_list=['--nested-second', '--nested-resource-type-second'], type=str,
                   help='The second child resource type.')
        c.argument('nested_resource_type_third', options_list=['--nested-third', '--nested-resource-type-third'], type=str,
                   help='The third child resource type.')
        c.argument('sku', type=str, help='The SKU.')
        c.argument('sku_settings', type=validate_file_or_dict,
                   help=' Expected value: json-string/@json-file.')

    with self.argument_context('providerhub sku update') as c:
        c.argument('provider_namespace', type=str,
                   help='The name of the resource provider hosted within ProviderHub.')
        c.argument('resource_type', type=str, help='The resource type.')
        c.argument('nested_resource_type_first', options_list=['--nested-first', '--nested-resource-type-first'], type=str,
                   help='The first child resource type.')
        c.argument('nested_resource_type_second', options_list=['--nested-second', '--nested-resource-type-second'], type=str,
                   help='The second child resource type.')
        c.argument('nested_resource_type_third', options_list=['--nested-third', '--nested-resource-type-third'], type=str,
                   help='The third child resource type.')
        c.argument('sku', type=str, help='The SKU.')
        c.argument('sku_settings', type=validate_file_or_dict,
                   help=' Expected value: json-string/@json-file.')

    with self.argument_context('providerhub sku delete') as c:
        c.argument('provider_namespace', type=str, help='The name of the resource provider hosted within ProviderHub.',
                   id_part='name')
        c.argument('resource_type', type=str,
                   help='The resource type.', id_part='child_name_1')
        c.argument('nested_resource_type_first', options_list=['--nested-first', '--nested-resource-type-first'], type=str, help='The first child resource type.',
                   id_part='child_name_2')
        c.argument('nested_resource_type_second', options_list=['--nested-second', '--nested-resource-type-second'], type=str, help='The second child resource type.',
                   id_part='child_name_3')
        c.argument('nested_resource_type_third', options_list=['--nested-third', '--nested-resource-type-third'], type=str, help='The third child resource type.',
                   id_part='child_name_4')
        c.argument('sku', type=str, help='The SKU.', id_part='child_name_5')

    with self.argument_context('providerhub sku show-nested-resource-type-first') as c:
        c.argument('provider_namespace', type=str, help='The name of the resource provider hosted within ProviderHub.',
                   id_part='name')
        c.argument('resource_type', type=str,
                   help='The resource type.', id_part='child_name_1')
        c.argument('nested_resource_type_first', options_list=['--nested-first', '--nested-resource-type-first'], type=str, help='The first child resource type.',
                   id_part='child_name_2')
        c.argument('sku', type=str, help='The SKU.', id_part='child_name_3')

    with self.argument_context('providerhub sku show-nested-resource-type-second') as c:
        c.argument('provider_namespace', type=str, help='The name of the resource provider hosted within ProviderHub.',
                   id_part='name')
        c.argument('resource_type', type=str,
                   help='The resource type.', id_part='child_name_1')
        c.argument('nested_resource_type_first', options_list=['--nested-first', '--nested-resource-type-first'], type=str, help='The first child resource type.',
                   id_part='child_name_2')
        c.argument('nested_resource_type_second', options_list=['--nested-second', '--nested-resource-type-second'], type=str, help='The second child resource type.',
                   id_part='child_name_3')
        c.argument('sku', type=str, help='The SKU.', id_part='child_name_4')

    with self.argument_context('providerhub sku show-nested-resource-type-third') as c:
        c.argument('provider_namespace', type=str, help='The name of the resource provider hosted within ProviderHub.',
                   id_part='name')
        c.argument('resource_type', type=str,
                   help='The resource type.', id_part='child_name_1')
        c.argument('nested_resource_type_first', options_list=['--nested-first', '--nested-resource-type-first'], type=str, help='The first child resource type.',
                   id_part='child_name_2')
        c.argument('nested_resource_type_second', options_list=['--nested-second', '--nested-resource-type-second'], type=str, help='The second child resource type.',
                   id_part='child_name_3')
        c.argument('nested_resource_type_third', options_list=['--nested-third', '--nested-resource-type-third'], type=str, help='The third child resource type.',
                   id_part='child_name_4')
        c.argument('sku', type=str, help='The SKU.', id_part='child_name_5')
