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

package com.azure.resourcemanager.providerhub.models;

import com.azure.core.annotation.Fluent;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.List;

/** The ProviderRegistrationPropertiesAutoGenerated model. */
@Fluent
public class ProviderRegistrationPropertiesAutoGenerated extends ResourceProviderManifestProperties {
    /*
     * The providerHubMetadata property.
     */
    @JsonProperty(value = "providerHubMetadata")
    private ProviderRegistrationPropertiesProviderHubMetadata providerHubMetadata;

    /*
     * The provisioningState property.
     */
    @JsonProperty(value = "provisioningState")
    private ProvisioningState provisioningState;

    /*
     * The subscriptionLifecycleNotificationSpecifications property.
     */
    @JsonProperty(value = "subscriptionLifecycleNotificationSpecifications")
    private ProviderRegistrationPropertiesSubscriptionLifecycleNotificationSpecifications
        subscriptionLifecycleNotificationSpecifications;

    /** Creates an instance of ProviderRegistrationPropertiesAutoGenerated class. */
    public ProviderRegistrationPropertiesAutoGenerated() {
    }

    /**
     * Get the providerHubMetadata property: The providerHubMetadata property.
     *
     * @return the providerHubMetadata value.
     */
    public ProviderRegistrationPropertiesProviderHubMetadata providerHubMetadata() {
        return this.providerHubMetadata;
    }

    /**
     * Set the providerHubMetadata property: The providerHubMetadata property.
     *
     * @param providerHubMetadata the providerHubMetadata value to set.
     * @return the ProviderRegistrationPropertiesAutoGenerated object itself.
     */
    public ProviderRegistrationPropertiesAutoGenerated withProviderHubMetadata(
        ProviderRegistrationPropertiesProviderHubMetadata providerHubMetadata) {
        this.providerHubMetadata = providerHubMetadata;
        return this;
    }

    /**
     * Get the provisioningState property: The provisioningState property.
     *
     * @return the provisioningState value.
     */
    public ProvisioningState provisioningState() {
        return this.provisioningState;
    }

    /**
     * Set the provisioningState property: The provisioningState property.
     *
     * @param provisioningState the provisioningState value to set.
     * @return the ProviderRegistrationPropertiesAutoGenerated object itself.
     */
    public ProviderRegistrationPropertiesAutoGenerated withProvisioningState(ProvisioningState provisioningState) {
        this.provisioningState = provisioningState;
        return this;
    }

    /**
     * Get the subscriptionLifecycleNotificationSpecifications property: The
     * subscriptionLifecycleNotificationSpecifications property.
     *
     * @return the subscriptionLifecycleNotificationSpecifications value.
     */
    public ProviderRegistrationPropertiesSubscriptionLifecycleNotificationSpecifications
        subscriptionLifecycleNotificationSpecifications() {
        return this.subscriptionLifecycleNotificationSpecifications;
    }

    /**
     * Set the subscriptionLifecycleNotificationSpecifications property: The
     * subscriptionLifecycleNotificationSpecifications property.
     *
     * @param subscriptionLifecycleNotificationSpecifications the subscriptionLifecycleNotificationSpecifications value
     *     to set.
     * @return the ProviderRegistrationPropertiesAutoGenerated object itself.
     */
    public ProviderRegistrationPropertiesAutoGenerated withSubscriptionLifecycleNotificationSpecifications(
        ProviderRegistrationPropertiesSubscriptionLifecycleNotificationSpecifications
            subscriptionLifecycleNotificationSpecifications) {
        this.subscriptionLifecycleNotificationSpecifications = subscriptionLifecycleNotificationSpecifications;
        return this;
    }

    /** {@inheritDoc} */
    @Override
    public ProviderRegistrationPropertiesAutoGenerated withProviderAuthentication(
        ResourceProviderManifestPropertiesProviderAuthentication providerAuthentication) {
        super.withProviderAuthentication(providerAuthentication);
        return this;
    }

    /** {@inheritDoc} */
    @Override
    public ProviderRegistrationPropertiesAutoGenerated withProviderAuthorizations(
        List<ResourceProviderAuthorization> providerAuthorizations) {
        super.withProviderAuthorizations(providerAuthorizations);
        return this;
    }

    /** {@inheritDoc} */
    @Override
    public ProviderRegistrationPropertiesAutoGenerated withNamespace(String namespace) {
        super.withNamespace(namespace);
        return this;
    }

    /** {@inheritDoc} */
    @Override
    public ProviderRegistrationPropertiesAutoGenerated withProviderVersion(String providerVersion) {
        super.withProviderVersion(providerVersion);
        return this;
    }

    /** {@inheritDoc} */
    @Override
    public ProviderRegistrationPropertiesAutoGenerated withProviderType(ResourceProviderType providerType) {
        super.withProviderType(providerType);
        return this;
    }

    /** {@inheritDoc} */
    @Override
    public ProviderRegistrationPropertiesAutoGenerated withRequiredFeatures(List<String> requiredFeatures) {
        super.withRequiredFeatures(requiredFeatures);
        return this;
    }

    /** {@inheritDoc} */
    @Override
    public ProviderRegistrationPropertiesAutoGenerated withFeaturesRule(
        ResourceProviderManifestPropertiesFeaturesRule featuresRule) {
        super.withFeaturesRule(featuresRule);
        return this;
    }

    /** {@inheritDoc} */
    @Override
    public ProviderRegistrationPropertiesAutoGenerated withRequestHeaderOptions(
        ResourceProviderManifestPropertiesRequestHeaderOptions requestHeaderOptions) {
        super.withRequestHeaderOptions(requestHeaderOptions);
        return this;
    }

    /** {@inheritDoc} */
    @Override
    public ProviderRegistrationPropertiesAutoGenerated withManagement(
        ResourceProviderManifestPropertiesManagement management) {
        super.withManagement(management);
        return this;
    }

    /** {@inheritDoc} */
    @Override
    public ProviderRegistrationPropertiesAutoGenerated withCapabilities(
        List<ResourceProviderCapabilities> capabilities) {
        super.withCapabilities(capabilities);
        return this;
    }

    /** {@inheritDoc} */
    @Override
    public ProviderRegistrationPropertiesAutoGenerated withMetadata(Object metadata) {
        super.withMetadata(metadata);
        return this;
    }

    /** {@inheritDoc} */
    @Override
    public ProviderRegistrationPropertiesAutoGenerated withTemplateDeploymentOptions(
        ResourceProviderManifestPropertiesTemplateDeploymentOptions templateDeploymentOptions) {
        super.withTemplateDeploymentOptions(templateDeploymentOptions);
        return this;
    }

    /**
     * Validates the instance.
     *
     * @throws IllegalArgumentException thrown if the instance is not valid.
     */
    @Override
    public void validate() {
        super.validate();
        if (providerHubMetadata() != null) {
            providerHubMetadata().validate();
        }
        if (subscriptionLifecycleNotificationSpecifications() != null) {
            subscriptionLifecycleNotificationSpecifications().validate();
        }
    }
}
