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

package com.azure.resourcemanager.hybridnetwork.fluent.models;

import com.azure.core.annotation.Fluent;
import com.azure.resourcemanager.hybridnetwork.models.NetworkFunctionTemplate;
import com.azure.resourcemanager.hybridnetwork.models.NetworkFunctionType;
import com.azure.resourcemanager.hybridnetwork.models.ProvisioningState;
import com.azure.resourcemanager.hybridnetwork.models.SkuDeploymentMode;
import com.azure.resourcemanager.hybridnetwork.models.SkuType;
import com.fasterxml.jackson.annotation.JsonProperty;

/** Sku properties. */
@Fluent
public final class VendorSkuPropertiesFormat {
    /*
     * The provisioning state of the vendor sku sub resource.
     */
    @JsonProperty(value = "provisioningState", access = JsonProperty.Access.WRITE_ONLY)
    private ProvisioningState provisioningState;

    /*
     * The sku type.
     */
    @JsonProperty(value = "skuType")
    private SkuType skuType;

    /*
     * The sku deployment mode.
     */
    @JsonProperty(value = "deploymentMode")
    private SkuDeploymentMode deploymentMode;

    /*
     * The network function type.
     */
    @JsonProperty(value = "networkFunctionType")
    private NetworkFunctionType networkFunctionType;

    /*
     * Indicates if the vendor sku is in preview mode.
     */
    @JsonProperty(value = "preview")
    private Boolean preview;

    /*
     * The parameters for the managed application to be supplied by the vendor.
     */
    @JsonProperty(value = "managedApplicationParameters")
    private Object managedApplicationParameters;

    /*
     * The template for the managed application deployment.
     */
    @JsonProperty(value = "managedApplicationTemplate")
    private Object managedApplicationTemplate;

    /*
     * The template definition of the network function.
     */
    @JsonProperty(value = "networkFunctionTemplate")
    private NetworkFunctionTemplate networkFunctionTemplate;

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

    /**
     * Get the provisioningState property: The provisioning state of the vendor sku sub resource.
     *
     * @return the provisioningState value.
     */
    public ProvisioningState provisioningState() {
        return this.provisioningState;
    }

    /**
     * Get the skuType property: The sku type.
     *
     * @return the skuType value.
     */
    public SkuType skuType() {
        return this.skuType;
    }

    /**
     * Set the skuType property: The sku type.
     *
     * @param skuType the skuType value to set.
     * @return the VendorSkuPropertiesFormat object itself.
     */
    public VendorSkuPropertiesFormat withSkuType(SkuType skuType) {
        this.skuType = skuType;
        return this;
    }

    /**
     * Get the deploymentMode property: The sku deployment mode.
     *
     * @return the deploymentMode value.
     */
    public SkuDeploymentMode deploymentMode() {
        return this.deploymentMode;
    }

    /**
     * Set the deploymentMode property: The sku deployment mode.
     *
     * @param deploymentMode the deploymentMode value to set.
     * @return the VendorSkuPropertiesFormat object itself.
     */
    public VendorSkuPropertiesFormat withDeploymentMode(SkuDeploymentMode deploymentMode) {
        this.deploymentMode = deploymentMode;
        return this;
    }

    /**
     * Get the networkFunctionType property: The network function type.
     *
     * @return the networkFunctionType value.
     */
    public NetworkFunctionType networkFunctionType() {
        return this.networkFunctionType;
    }

    /**
     * Set the networkFunctionType property: The network function type.
     *
     * @param networkFunctionType the networkFunctionType value to set.
     * @return the VendorSkuPropertiesFormat object itself.
     */
    public VendorSkuPropertiesFormat withNetworkFunctionType(NetworkFunctionType networkFunctionType) {
        this.networkFunctionType = networkFunctionType;
        return this;
    }

    /**
     * Get the preview property: Indicates if the vendor sku is in preview mode.
     *
     * @return the preview value.
     */
    public Boolean preview() {
        return this.preview;
    }

    /**
     * Set the preview property: Indicates if the vendor sku is in preview mode.
     *
     * @param preview the preview value to set.
     * @return the VendorSkuPropertiesFormat object itself.
     */
    public VendorSkuPropertiesFormat withPreview(Boolean preview) {
        this.preview = preview;
        return this;
    }

    /**
     * Get the managedApplicationParameters property: The parameters for the managed application to be supplied by the
     * vendor.
     *
     * @return the managedApplicationParameters value.
     */
    public Object managedApplicationParameters() {
        return this.managedApplicationParameters;
    }

    /**
     * Set the managedApplicationParameters property: The parameters for the managed application to be supplied by the
     * vendor.
     *
     * @param managedApplicationParameters the managedApplicationParameters value to set.
     * @return the VendorSkuPropertiesFormat object itself.
     */
    public VendorSkuPropertiesFormat withManagedApplicationParameters(Object managedApplicationParameters) {
        this.managedApplicationParameters = managedApplicationParameters;
        return this;
    }

    /**
     * Get the managedApplicationTemplate property: The template for the managed application deployment.
     *
     * @return the managedApplicationTemplate value.
     */
    public Object managedApplicationTemplate() {
        return this.managedApplicationTemplate;
    }

    /**
     * Set the managedApplicationTemplate property: The template for the managed application deployment.
     *
     * @param managedApplicationTemplate the managedApplicationTemplate value to set.
     * @return the VendorSkuPropertiesFormat object itself.
     */
    public VendorSkuPropertiesFormat withManagedApplicationTemplate(Object managedApplicationTemplate) {
        this.managedApplicationTemplate = managedApplicationTemplate;
        return this;
    }

    /**
     * Get the networkFunctionTemplate property: The template definition of the network function.
     *
     * @return the networkFunctionTemplate value.
     */
    public NetworkFunctionTemplate networkFunctionTemplate() {
        return this.networkFunctionTemplate;
    }

    /**
     * Set the networkFunctionTemplate property: The template definition of the network function.
     *
     * @param networkFunctionTemplate the networkFunctionTemplate value to set.
     * @return the VendorSkuPropertiesFormat object itself.
     */
    public VendorSkuPropertiesFormat withNetworkFunctionTemplate(NetworkFunctionTemplate networkFunctionTemplate) {
        this.networkFunctionTemplate = networkFunctionTemplate;
        return this;
    }

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