// *** 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.inputs;

import com.pulumi.azure.media.inputs.StreamingLocatorContentKeyArgs;
import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import java.lang.String;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


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

    public static final StreamingLocatorState Empty = new StreamingLocatorState();

    /**
     * Alternative Media ID of this Streaming Locator. Changing this forces a new Streaming Locator to be created.
     * 
     */
    @Import(name="alternativeMediaId")
    private @Nullable Output<String> alternativeMediaId;

    /**
     * @return Alternative Media ID of this Streaming Locator. Changing this forces a new Streaming Locator to be created.
     * 
     */
    public Optional<Output<String>> alternativeMediaId() {
        return Optional.ofNullable(this.alternativeMediaId);
    }

    /**
     * Asset Name. Changing this forces a new Streaming Locator to be created.
     * 
     */
    @Import(name="assetName")
    private @Nullable Output<String> assetName;

    /**
     * @return Asset Name. Changing this forces a new Streaming Locator to be created.
     * 
     */
    public Optional<Output<String>> assetName() {
        return Optional.ofNullable(this.assetName);
    }

    /**
     * One or more `content_key` blocks as defined below. Changing this forces a new Streaming Locator to be created.
     * 
     */
    @Import(name="contentKeys")
    private @Nullable Output<List<StreamingLocatorContentKeyArgs>> contentKeys;

    /**
     * @return One or more `content_key` blocks as defined below. Changing this forces a new Streaming Locator to be created.
     * 
     */
    public Optional<Output<List<StreamingLocatorContentKeyArgs>>> contentKeys() {
        return Optional.ofNullable(this.contentKeys);
    }

    /**
     * Name of the default Content Key Policy used by this Streaming Locator.Changing this forces a new Streaming Locator to be created.
     * 
     */
    @Import(name="defaultContentKeyPolicyName")
    private @Nullable Output<String> defaultContentKeyPolicyName;

    /**
     * @return Name of the default Content Key Policy used by this Streaming Locator.Changing this forces a new Streaming Locator to be created.
     * 
     */
    public Optional<Output<String>> defaultContentKeyPolicyName() {
        return Optional.ofNullable(this.defaultContentKeyPolicyName);
    }

    /**
     * The end time of the Streaming Locator. Changing this forces a new Streaming Locator to be created.
     * 
     */
    @Import(name="endTime")
    private @Nullable Output<String> endTime;

    /**
     * @return The end time of the Streaming Locator. Changing this forces a new Streaming Locator to be created.
     * 
     */
    public Optional<Output<String>> endTime() {
        return Optional.ofNullable(this.endTime);
    }

    /**
     * A list of names of asset or account filters which apply to this Streaming Locator. Changing this forces a new Streaming Locator to be created.
     * 
     */
    @Import(name="filterNames")
    private @Nullable Output<List<String>> filterNames;

    /**
     * @return A list of names of asset or account filters which apply to this Streaming Locator. Changing this forces a new Streaming Locator to be created.
     * 
     */
    public Optional<Output<List<String>>> filterNames() {
        return Optional.ofNullable(this.filterNames);
    }

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

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

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

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

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

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

    /**
     * The start time of the Streaming Locator. Changing this forces a new Streaming Locator to be created.
     * 
     */
    @Import(name="startTime")
    private @Nullable Output<String> startTime;

    /**
     * @return The start time of the Streaming Locator. Changing this forces a new Streaming Locator to be created.
     * 
     */
    public Optional<Output<String>> startTime() {
        return Optional.ofNullable(this.startTime);
    }

    /**
     * The ID of the Streaming Locator. Changing this forces a new Streaming Locator to be created.
     * 
     */
    @Import(name="streamingLocatorId")
    private @Nullable Output<String> streamingLocatorId;

    /**
     * @return The ID of the Streaming Locator. Changing this forces a new Streaming Locator to be created.
     * 
     */
    public Optional<Output<String>> streamingLocatorId() {
        return Optional.ofNullable(this.streamingLocatorId);
    }

    /**
     * Name of the Streaming Policy used by this Streaming Locator. Either specify the name of Streaming Policy you created or use one of the predefined Streaming Policies. The predefined Streaming Policies available are: `Predefined_DownloadOnly`, `Predefined_ClearStreamingOnly`, `Predefined_DownloadAndClearStreaming`, `Predefined_ClearKey`, `Predefined_MultiDrmCencStreaming` and `Predefined_MultiDrmStreaming`. Changing this forces a new Streaming Locator to be created.
     * 
     */
    @Import(name="streamingPolicyName")
    private @Nullable Output<String> streamingPolicyName;

    /**
     * @return Name of the Streaming Policy used by this Streaming Locator. Either specify the name of Streaming Policy you created or use one of the predefined Streaming Policies. The predefined Streaming Policies available are: `Predefined_DownloadOnly`, `Predefined_ClearStreamingOnly`, `Predefined_DownloadAndClearStreaming`, `Predefined_ClearKey`, `Predefined_MultiDrmCencStreaming` and `Predefined_MultiDrmStreaming`. Changing this forces a new Streaming Locator to be created.
     * 
     */
    public Optional<Output<String>> streamingPolicyName() {
        return Optional.ofNullable(this.streamingPolicyName);
    }

    private StreamingLocatorState() {}

    private StreamingLocatorState(StreamingLocatorState $) {
        this.alternativeMediaId = $.alternativeMediaId;
        this.assetName = $.assetName;
        this.contentKeys = $.contentKeys;
        this.defaultContentKeyPolicyName = $.defaultContentKeyPolicyName;
        this.endTime = $.endTime;
        this.filterNames = $.filterNames;
        this.mediaServicesAccountName = $.mediaServicesAccountName;
        this.name = $.name;
        this.resourceGroupName = $.resourceGroupName;
        this.startTime = $.startTime;
        this.streamingLocatorId = $.streamingLocatorId;
        this.streamingPolicyName = $.streamingPolicyName;
    }

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

    public static final class Builder {
        private StreamingLocatorState $;

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

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

        /**
         * @param alternativeMediaId Alternative Media ID of this Streaming Locator. Changing this forces a new Streaming Locator to be created.
         * 
         * @return builder
         * 
         */
        public Builder alternativeMediaId(@Nullable Output<String> alternativeMediaId) {
            $.alternativeMediaId = alternativeMediaId;
            return this;
        }

        /**
         * @param alternativeMediaId Alternative Media ID of this Streaming Locator. Changing this forces a new Streaming Locator to be created.
         * 
         * @return builder
         * 
         */
        public Builder alternativeMediaId(String alternativeMediaId) {
            return alternativeMediaId(Output.of(alternativeMediaId));
        }

        /**
         * @param assetName Asset Name. Changing this forces a new Streaming Locator to be created.
         * 
         * @return builder
         * 
         */
        public Builder assetName(@Nullable Output<String> assetName) {
            $.assetName = assetName;
            return this;
        }

        /**
         * @param assetName Asset Name. Changing this forces a new Streaming Locator to be created.
         * 
         * @return builder
         * 
         */
        public Builder assetName(String assetName) {
            return assetName(Output.of(assetName));
        }

        /**
         * @param contentKeys One or more `content_key` blocks as defined below. Changing this forces a new Streaming Locator to be created.
         * 
         * @return builder
         * 
         */
        public Builder contentKeys(@Nullable Output<List<StreamingLocatorContentKeyArgs>> contentKeys) {
            $.contentKeys = contentKeys;
            return this;
        }

        /**
         * @param contentKeys One or more `content_key` blocks as defined below. Changing this forces a new Streaming Locator to be created.
         * 
         * @return builder
         * 
         */
        public Builder contentKeys(List<StreamingLocatorContentKeyArgs> contentKeys) {
            return contentKeys(Output.of(contentKeys));
        }

        /**
         * @param contentKeys One or more `content_key` blocks as defined below. Changing this forces a new Streaming Locator to be created.
         * 
         * @return builder
         * 
         */
        public Builder contentKeys(StreamingLocatorContentKeyArgs... contentKeys) {
            return contentKeys(List.of(contentKeys));
        }

        /**
         * @param defaultContentKeyPolicyName Name of the default Content Key Policy used by this Streaming Locator.Changing this forces a new Streaming Locator to be created.
         * 
         * @return builder
         * 
         */
        public Builder defaultContentKeyPolicyName(@Nullable Output<String> defaultContentKeyPolicyName) {
            $.defaultContentKeyPolicyName = defaultContentKeyPolicyName;
            return this;
        }

        /**
         * @param defaultContentKeyPolicyName Name of the default Content Key Policy used by this Streaming Locator.Changing this forces a new Streaming Locator to be created.
         * 
         * @return builder
         * 
         */
        public Builder defaultContentKeyPolicyName(String defaultContentKeyPolicyName) {
            return defaultContentKeyPolicyName(Output.of(defaultContentKeyPolicyName));
        }

        /**
         * @param endTime The end time of the Streaming Locator. Changing this forces a new Streaming Locator to be created.
         * 
         * @return builder
         * 
         */
        public Builder endTime(@Nullable Output<String> endTime) {
            $.endTime = endTime;
            return this;
        }

        /**
         * @param endTime The end time of the Streaming Locator. Changing this forces a new Streaming Locator to be created.
         * 
         * @return builder
         * 
         */
        public Builder endTime(String endTime) {
            return endTime(Output.of(endTime));
        }

        /**
         * @param filterNames A list of names of asset or account filters which apply to this Streaming Locator. Changing this forces a new Streaming Locator to be created.
         * 
         * @return builder
         * 
         */
        public Builder filterNames(@Nullable Output<List<String>> filterNames) {
            $.filterNames = filterNames;
            return this;
        }

        /**
         * @param filterNames A list of names of asset or account filters which apply to this Streaming Locator. Changing this forces a new Streaming Locator to be created.
         * 
         * @return builder
         * 
         */
        public Builder filterNames(List<String> filterNames) {
            return filterNames(Output.of(filterNames));
        }

        /**
         * @param filterNames A list of names of asset or account filters which apply to this Streaming Locator. Changing this forces a new Streaming Locator to be created.
         * 
         * @return builder
         * 
         */
        public Builder filterNames(String... filterNames) {
            return filterNames(List.of(filterNames));
        }

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

        /**
         * @param mediaServicesAccountName The Media Services account name. Changing this forces a new Streaming Locator 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 Locator. Changing this forces a new Streaming Locator 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 Locator. Changing this forces a new Streaming Locator 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 Locator should exist. Changing this forces a new Streaming Locator to be created.
         * 
         * @return builder
         * 
         */
        public Builder resourceGroupName(@Nullable Output<String> resourceGroupName) {
            $.resourceGroupName = resourceGroupName;
            return this;
        }

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

        /**
         * @param startTime The start time of the Streaming Locator. Changing this forces a new Streaming Locator to be created.
         * 
         * @return builder
         * 
         */
        public Builder startTime(@Nullable Output<String> startTime) {
            $.startTime = startTime;
            return this;
        }

        /**
         * @param startTime The start time of the Streaming Locator. Changing this forces a new Streaming Locator to be created.
         * 
         * @return builder
         * 
         */
        public Builder startTime(String startTime) {
            return startTime(Output.of(startTime));
        }

        /**
         * @param streamingLocatorId The ID of the Streaming Locator. Changing this forces a new Streaming Locator to be created.
         * 
         * @return builder
         * 
         */
        public Builder streamingLocatorId(@Nullable Output<String> streamingLocatorId) {
            $.streamingLocatorId = streamingLocatorId;
            return this;
        }

        /**
         * @param streamingLocatorId The ID of the Streaming Locator. Changing this forces a new Streaming Locator to be created.
         * 
         * @return builder
         * 
         */
        public Builder streamingLocatorId(String streamingLocatorId) {
            return streamingLocatorId(Output.of(streamingLocatorId));
        }

        /**
         * @param streamingPolicyName Name of the Streaming Policy used by this Streaming Locator. Either specify the name of Streaming Policy you created or use one of the predefined Streaming Policies. The predefined Streaming Policies available are: `Predefined_DownloadOnly`, `Predefined_ClearStreamingOnly`, `Predefined_DownloadAndClearStreaming`, `Predefined_ClearKey`, `Predefined_MultiDrmCencStreaming` and `Predefined_MultiDrmStreaming`. Changing this forces a new Streaming Locator to be created.
         * 
         * @return builder
         * 
         */
        public Builder streamingPolicyName(@Nullable Output<String> streamingPolicyName) {
            $.streamingPolicyName = streamingPolicyName;
            return this;
        }

        /**
         * @param streamingPolicyName Name of the Streaming Policy used by this Streaming Locator. Either specify the name of Streaming Policy you created or use one of the predefined Streaming Policies. The predefined Streaming Policies available are: `Predefined_DownloadOnly`, `Predefined_ClearStreamingOnly`, `Predefined_DownloadAndClearStreaming`, `Predefined_ClearKey`, `Predefined_MultiDrmCencStreaming` and `Predefined_MultiDrmStreaming`. Changing this forces a new Streaming Locator to be created.
         * 
         * @return builder
         * 
         */
        public Builder streamingPolicyName(String streamingPolicyName) {
            return streamingPolicyName(Output.of(streamingPolicyName));
        }

        public StreamingLocatorState build() {
            return $;
        }
    }

}
