// *** WARNING: this file was generated by pulumi-java-gen. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

package com.pulumi.azure.media;

import com.pulumi.azure.media.inputs.StreamingEndpointAccessControlArgs;
import com.pulumi.azure.media.inputs.StreamingEndpointCrossSiteAccessPolicyArgs;
import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import java.lang.Boolean;
import java.lang.Integer;
import java.lang.String;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


public final class StreamingEndpointArgs extends com.pulumi.resources.ResourceArgs {

    public static final StreamingEndpointArgs Empty = new StreamingEndpointArgs();

    /**
     * A `access_control` block as defined below.
     * 
     */
    @Import(name="accessControl")
    private @Nullable Output<StreamingEndpointAccessControlArgs> accessControl;

    /**
     * @return A `access_control` block as defined below.
     * 
     */
    public Optional<Output<StreamingEndpointAccessControlArgs>> accessControl() {
        return Optional.ofNullable(this.accessControl);
    }

    /**
     * The flag indicates if the resource should be automatically started on creation.
     * 
     */
    @Import(name="autoStartEnabled")
    private @Nullable Output<Boolean> autoStartEnabled;

    /**
     * @return The flag indicates if the resource should be automatically started on creation.
     * 
     */
    public Optional<Output<Boolean>> autoStartEnabled() {
        return Optional.ofNullable(this.autoStartEnabled);
    }

    /**
     * The CDN enabled flag.
     * 
     */
    @Import(name="cdnEnabled")
    private @Nullable Output<Boolean> cdnEnabled;

    /**
     * @return The CDN enabled flag.
     * 
     */
    public Optional<Output<Boolean>> cdnEnabled() {
        return Optional.ofNullable(this.cdnEnabled);
    }

    /**
     * The CDN profile name.
     * 
     */
    @Import(name="cdnProfile")
    private @Nullable Output<String> cdnProfile;

    /**
     * @return The CDN profile name.
     * 
     */
    public Optional<Output<String>> cdnProfile() {
        return Optional.ofNullable(this.cdnProfile);
    }

    /**
     * The CDN provider name. Supported value are `StandardVerizon`,`PremiumVerizon` and `StandardAkamai`
     * 
     */
    @Import(name="cdnProvider")
    private @Nullable Output<String> cdnProvider;

    /**
     * @return The CDN provider name. Supported value are `StandardVerizon`,`PremiumVerizon` and `StandardAkamai`
     * 
     */
    public Optional<Output<String>> cdnProvider() {
        return Optional.ofNullable(this.cdnProvider);
    }

    /**
     * A `cross_site_access_policy` block as defined below.
     * 
     */
    @Import(name="crossSiteAccessPolicy")
    private @Nullable Output<StreamingEndpointCrossSiteAccessPolicyArgs> crossSiteAccessPolicy;

    /**
     * @return A `cross_site_access_policy` block as defined below.
     * 
     */
    public Optional<Output<StreamingEndpointCrossSiteAccessPolicyArgs>> crossSiteAccessPolicy() {
        return Optional.ofNullable(this.crossSiteAccessPolicy);
    }

    /**
     * The custom host names of the streaming endpoint.
     * 
     */
    @Import(name="customHostNames")
    private @Nullable Output<List<String>> customHostNames;

    /**
     * @return The custom host names of the streaming endpoint.
     * 
     */
    public Optional<Output<List<String>>> customHostNames() {
        return Optional.ofNullable(this.customHostNames);
    }

    /**
     * The streaming endpoint description.
     * 
     */
    @Import(name="description")
    private @Nullable Output<String> description;

    /**
     * @return The streaming endpoint description.
     * 
     */
    public Optional<Output<String>> description() {
        return Optional.ofNullable(this.description);
    }

    /**
     * The Azure Region where the Streaming Endpoint should exist. Changing this forces a new Streaming Endpoint to be created.
     * 
     */
    @Import(name="location")
    private @Nullable Output<String> location;

    /**
     * @return The Azure Region where the Streaming Endpoint should exist. Changing this forces a new Streaming Endpoint to be created.
     * 
     */
    public Optional<Output<String>> location() {
        return Optional.ofNullable(this.location);
    }

    /**
     * Max cache age in seconds.
     * 
     */
    @Import(name="maxCacheAgeSeconds")
    private @Nullable Output<Integer> maxCacheAgeSeconds;

    /**
     * @return Max cache age in seconds.
     * 
     */
    public Optional<Output<Integer>> maxCacheAgeSeconds() {
        return Optional.ofNullable(this.maxCacheAgeSeconds);
    }

    /**
     * The Media Services account name. Changing this forces a new Streaming Endpoint to be created.
     * 
     */
    @Import(name="mediaServicesAccountName", required=true)
    private Output<String> mediaServicesAccountName;

    /**
     * @return The Media Services account name. Changing this forces a new Streaming Endpoint to be created.
     * 
     */
    public Output<String> mediaServicesAccountName() {
        return this.mediaServicesAccountName;
    }

    /**
     * The name which should be used for this Streaming Endpoint maximum length is `24`. Changing this forces a new Streaming Endpoint to be created.
     * 
     */
    @Import(name="name")
    private @Nullable Output<String> name;

    /**
     * @return The name which should be used for this Streaming Endpoint maximum length is `24`. Changing this forces a new Streaming Endpoint to be created.
     * 
     */
    public Optional<Output<String>> name() {
        return Optional.ofNullable(this.name);
    }

    /**
     * The name of the Resource Group where the Streaming Endpoint should exist. Changing this forces a new Streaming Endpoint to be created.
     * 
     */
    @Import(name="resourceGroupName", required=true)
    private Output<String> resourceGroupName;

    /**
     * @return The name of the Resource Group where the Streaming Endpoint should exist. Changing this forces a new Streaming Endpoint to be created.
     * 
     */
    public Output<String> resourceGroupName() {
        return this.resourceGroupName;
    }

    /**
     * The number of scale units. To create a Standard Streaming Endpoint set `0`. For Premium Streaming Endpoint valid values are between `1` and `10`.
     * 
     */
    @Import(name="scaleUnits", required=true)
    private Output<Integer> scaleUnits;

    /**
     * @return The number of scale units. To create a Standard Streaming Endpoint set `0`. For Premium Streaming Endpoint valid values are between `1` and `10`.
     * 
     */
    public Output<Integer> scaleUnits() {
        return this.scaleUnits;
    }

    /**
     * A mapping of tags which should be assigned to the Streaming Endpoint.
     * 
     */
    @Import(name="tags")
    private @Nullable Output<Map<String,String>> tags;

    /**
     * @return A mapping of tags which should be assigned to the Streaming Endpoint.
     * 
     */
    public Optional<Output<Map<String,String>>> tags() {
        return Optional.ofNullable(this.tags);
    }

    private StreamingEndpointArgs() {}

    private StreamingEndpointArgs(StreamingEndpointArgs $) {
        this.accessControl = $.accessControl;
        this.autoStartEnabled = $.autoStartEnabled;
        this.cdnEnabled = $.cdnEnabled;
        this.cdnProfile = $.cdnProfile;
        this.cdnProvider = $.cdnProvider;
        this.crossSiteAccessPolicy = $.crossSiteAccessPolicy;
        this.customHostNames = $.customHostNames;
        this.description = $.description;
        this.location = $.location;
        this.maxCacheAgeSeconds = $.maxCacheAgeSeconds;
        this.mediaServicesAccountName = $.mediaServicesAccountName;
        this.name = $.name;
        this.resourceGroupName = $.resourceGroupName;
        this.scaleUnits = $.scaleUnits;
        this.tags = $.tags;
    }

    public static Builder builder() {
        return new Builder();
    }
    public static Builder builder(StreamingEndpointArgs defaults) {
        return new Builder(defaults);
    }

    public static final class Builder {
        private StreamingEndpointArgs $;

        public Builder() {
            $ = new StreamingEndpointArgs();
        }

        public Builder(StreamingEndpointArgs defaults) {
            $ = new StreamingEndpointArgs(Objects.requireNonNull(defaults));
        }

        /**
         * @param accessControl A `access_control` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder accessControl(@Nullable Output<StreamingEndpointAccessControlArgs> accessControl) {
            $.accessControl = accessControl;
            return this;
        }

        /**
         * @param accessControl A `access_control` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder accessControl(StreamingEndpointAccessControlArgs accessControl) {
            return accessControl(Output.of(accessControl));
        }

        /**
         * @param autoStartEnabled The flag indicates if the resource should be automatically started on creation.
         * 
         * @return builder
         * 
         */
        public Builder autoStartEnabled(@Nullable Output<Boolean> autoStartEnabled) {
            $.autoStartEnabled = autoStartEnabled;
            return this;
        }

        /**
         * @param autoStartEnabled The flag indicates if the resource should be automatically started on creation.
         * 
         * @return builder
         * 
         */
        public Builder autoStartEnabled(Boolean autoStartEnabled) {
            return autoStartEnabled(Output.of(autoStartEnabled));
        }

        /**
         * @param cdnEnabled The CDN enabled flag.
         * 
         * @return builder
         * 
         */
        public Builder cdnEnabled(@Nullable Output<Boolean> cdnEnabled) {
            $.cdnEnabled = cdnEnabled;
            return this;
        }

        /**
         * @param cdnEnabled The CDN enabled flag.
         * 
         * @return builder
         * 
         */
        public Builder cdnEnabled(Boolean cdnEnabled) {
            return cdnEnabled(Output.of(cdnEnabled));
        }

        /**
         * @param cdnProfile The CDN profile name.
         * 
         * @return builder
         * 
         */
        public Builder cdnProfile(@Nullable Output<String> cdnProfile) {
            $.cdnProfile = cdnProfile;
            return this;
        }

        /**
         * @param cdnProfile The CDN profile name.
         * 
         * @return builder
         * 
         */
        public Builder cdnProfile(String cdnProfile) {
            return cdnProfile(Output.of(cdnProfile));
        }

        /**
         * @param cdnProvider The CDN provider name. Supported value are `StandardVerizon`,`PremiumVerizon` and `StandardAkamai`
         * 
         * @return builder
         * 
         */
        public Builder cdnProvider(@Nullable Output<String> cdnProvider) {
            $.cdnProvider = cdnProvider;
            return this;
        }

        /**
         * @param cdnProvider The CDN provider name. Supported value are `StandardVerizon`,`PremiumVerizon` and `StandardAkamai`
         * 
         * @return builder
         * 
         */
        public Builder cdnProvider(String cdnProvider) {
            return cdnProvider(Output.of(cdnProvider));
        }

        /**
         * @param crossSiteAccessPolicy A `cross_site_access_policy` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder crossSiteAccessPolicy(@Nullable Output<StreamingEndpointCrossSiteAccessPolicyArgs> crossSiteAccessPolicy) {
            $.crossSiteAccessPolicy = crossSiteAccessPolicy;
            return this;
        }

        /**
         * @param crossSiteAccessPolicy A `cross_site_access_policy` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder crossSiteAccessPolicy(StreamingEndpointCrossSiteAccessPolicyArgs crossSiteAccessPolicy) {
            return crossSiteAccessPolicy(Output.of(crossSiteAccessPolicy));
        }

        /**
         * @param customHostNames The custom host names of the streaming endpoint.
         * 
         * @return builder
         * 
         */
        public Builder customHostNames(@Nullable Output<List<String>> customHostNames) {
            $.customHostNames = customHostNames;
            return this;
        }

        /**
         * @param customHostNames The custom host names of the streaming endpoint.
         * 
         * @return builder
         * 
         */
        public Builder customHostNames(List<String> customHostNames) {
            return customHostNames(Output.of(customHostNames));
        }

        /**
         * @param customHostNames The custom host names of the streaming endpoint.
         * 
         * @return builder
         * 
         */
        public Builder customHostNames(String... customHostNames) {
            return customHostNames(List.of(customHostNames));
        }

        /**
         * @param description The streaming endpoint description.
         * 
         * @return builder
         * 
         */
        public Builder description(@Nullable Output<String> description) {
            $.description = description;
            return this;
        }

        /**
         * @param description The streaming endpoint description.
         * 
         * @return builder
         * 
         */
        public Builder description(String description) {
            return description(Output.of(description));
        }

        /**
         * @param location The Azure Region where the Streaming Endpoint should exist. Changing this forces a new Streaming Endpoint to be created.
         * 
         * @return builder
         * 
         */
        public Builder location(@Nullable Output<String> location) {
            $.location = location;
            return this;
        }

        /**
         * @param location The Azure Region where the Streaming Endpoint should exist. Changing this forces a new Streaming Endpoint to be created.
         * 
         * @return builder
         * 
         */
        public Builder location(String location) {
            return location(Output.of(location));
        }

        /**
         * @param maxCacheAgeSeconds Max cache age in seconds.
         * 
         * @return builder
         * 
         */
        public Builder maxCacheAgeSeconds(@Nullable Output<Integer> maxCacheAgeSeconds) {
            $.maxCacheAgeSeconds = maxCacheAgeSeconds;
            return this;
        }

        /**
         * @param maxCacheAgeSeconds Max cache age in seconds.
         * 
         * @return builder
         * 
         */
        public Builder maxCacheAgeSeconds(Integer maxCacheAgeSeconds) {
            return maxCacheAgeSeconds(Output.of(maxCacheAgeSeconds));
        }

        /**
         * @param mediaServicesAccountName The Media Services account name. Changing this forces a new Streaming Endpoint to be created.
         * 
         * @return builder
         * 
         */
        public Builder mediaServicesAccountName(Output<String> mediaServicesAccountName) {
            $.mediaServicesAccountName = mediaServicesAccountName;
            return this;
        }

        /**
         * @param mediaServicesAccountName The Media Services account name. Changing this forces a new Streaming Endpoint to be created.
         * 
         * @return builder
         * 
         */
        public Builder mediaServicesAccountName(String mediaServicesAccountName) {
            return mediaServicesAccountName(Output.of(mediaServicesAccountName));
        }

        /**
         * @param name The name which should be used for this Streaming Endpoint maximum length is `24`. Changing this forces a new Streaming Endpoint to be created.
         * 
         * @return builder
         * 
         */
        public Builder name(@Nullable Output<String> name) {
            $.name = name;
            return this;
        }

        /**
         * @param name The name which should be used for this Streaming Endpoint maximum length is `24`. Changing this forces a new Streaming Endpoint to be created.
         * 
         * @return builder
         * 
         */
        public Builder name(String name) {
            return name(Output.of(name));
        }

        /**
         * @param resourceGroupName The name of the Resource Group where the Streaming Endpoint should exist. Changing this forces a new Streaming Endpoint to be created.
         * 
         * @return builder
         * 
         */
        public Builder resourceGroupName(Output<String> resourceGroupName) {
            $.resourceGroupName = resourceGroupName;
            return this;
        }

        /**
         * @param resourceGroupName The name of the Resource Group where the Streaming Endpoint should exist. Changing this forces a new Streaming Endpoint to be created.
         * 
         * @return builder
         * 
         */
        public Builder resourceGroupName(String resourceGroupName) {
            return resourceGroupName(Output.of(resourceGroupName));
        }

        /**
         * @param scaleUnits The number of scale units. To create a Standard Streaming Endpoint set `0`. For Premium Streaming Endpoint valid values are between `1` and `10`.
         * 
         * @return builder
         * 
         */
        public Builder scaleUnits(Output<Integer> scaleUnits) {
            $.scaleUnits = scaleUnits;
            return this;
        }

        /**
         * @param scaleUnits The number of scale units. To create a Standard Streaming Endpoint set `0`. For Premium Streaming Endpoint valid values are between `1` and `10`.
         * 
         * @return builder
         * 
         */
        public Builder scaleUnits(Integer scaleUnits) {
            return scaleUnits(Output.of(scaleUnits));
        }

        /**
         * @param tags A mapping of tags which should be assigned to the Streaming Endpoint.
         * 
         * @return builder
         * 
         */
        public Builder tags(@Nullable Output<Map<String,String>> tags) {
            $.tags = tags;
            return this;
        }

        /**
         * @param tags A mapping of tags which should be assigned to the Streaming Endpoint.
         * 
         * @return builder
         * 
         */
        public Builder tags(Map<String,String> tags) {
            return tags(Output.of(tags));
        }

        public StreamingEndpointArgs build() {
            $.mediaServicesAccountName = Objects.requireNonNull($.mediaServicesAccountName, "expected parameter 'mediaServicesAccountName' to be non-null");
            $.resourceGroupName = Objects.requireNonNull($.resourceGroupName, "expected parameter 'resourceGroupName' to be non-null");
            $.scaleUnits = Objects.requireNonNull($.scaleUnits, "expected parameter 'scaleUnits' to be non-null");
            return $;
        }
    }

}
