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

import com.pulumi.aws.medialive.inputs.InputDestinationArgs;
import com.pulumi.aws.medialive.inputs.InputInputDeviceArgs;
import com.pulumi.aws.medialive.inputs.InputMediaConnectFlowArgs;
import com.pulumi.aws.medialive.inputs.InputSourceArgs;
import com.pulumi.aws.medialive.inputs.InputVpcArgs;
import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
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 InputState extends com.pulumi.resources.ResourceArgs {

    public static final InputState Empty = new InputState();

    /**
     * ARN of the Input.
     * 
     */
    @Import(name="arn")
    private @Nullable Output<String> arn;

    /**
     * @return ARN of the Input.
     * 
     */
    public Optional<Output<String>> arn() {
        return Optional.ofNullable(this.arn);
    }

    /**
     * Channels attached to Input.
     * 
     */
    @Import(name="attachedChannels")
    private @Nullable Output<List<String>> attachedChannels;

    /**
     * @return Channels attached to Input.
     * 
     */
    public Optional<Output<List<String>>> attachedChannels() {
        return Optional.ofNullable(this.attachedChannels);
    }

    /**
     * Destination settings for PUSH type inputs. See Destinations for more details.
     * 
     */
    @Import(name="destinations")
    private @Nullable Output<List<InputDestinationArgs>> destinations;

    /**
     * @return Destination settings for PUSH type inputs. See Destinations for more details.
     * 
     */
    public Optional<Output<List<InputDestinationArgs>>> destinations() {
        return Optional.ofNullable(this.destinations);
    }

    /**
     * The input class.
     * 
     */
    @Import(name="inputClass")
    private @Nullable Output<String> inputClass;

    /**
     * @return The input class.
     * 
     */
    public Optional<Output<String>> inputClass() {
        return Optional.ofNullable(this.inputClass);
    }

    /**
     * Settings for the devices. See Input Devices for more details.
     * 
     */
    @Import(name="inputDevices")
    private @Nullable Output<List<InputInputDeviceArgs>> inputDevices;

    /**
     * @return Settings for the devices. See Input Devices for more details.
     * 
     */
    public Optional<Output<List<InputInputDeviceArgs>>> inputDevices() {
        return Optional.ofNullable(this.inputDevices);
    }

    /**
     * A list of IDs for all Inputs which are partners of this one.
     * 
     */
    @Import(name="inputPartnerIds")
    private @Nullable Output<List<String>> inputPartnerIds;

    /**
     * @return A list of IDs for all Inputs which are partners of this one.
     * 
     */
    public Optional<Output<List<String>>> inputPartnerIds() {
        return Optional.ofNullable(this.inputPartnerIds);
    }

    /**
     * List of input security groups.
     * 
     */
    @Import(name="inputSecurityGroups")
    private @Nullable Output<List<String>> inputSecurityGroups;

    /**
     * @return List of input security groups.
     * 
     */
    public Optional<Output<List<String>>> inputSecurityGroups() {
        return Optional.ofNullable(this.inputSecurityGroups);
    }

    /**
     * Source type of the input.
     * 
     */
    @Import(name="inputSourceType")
    private @Nullable Output<String> inputSourceType;

    /**
     * @return Source type of the input.
     * 
     */
    public Optional<Output<String>> inputSourceType() {
        return Optional.ofNullable(this.inputSourceType);
    }

    /**
     * A list of the MediaConnect Flows. See Media Connect Flows for more details.
     * 
     */
    @Import(name="mediaConnectFlows")
    private @Nullable Output<List<InputMediaConnectFlowArgs>> mediaConnectFlows;

    /**
     * @return A list of the MediaConnect Flows. See Media Connect Flows for more details.
     * 
     */
    public Optional<Output<List<InputMediaConnectFlowArgs>>> mediaConnectFlows() {
        return Optional.ofNullable(this.mediaConnectFlows);
    }

    /**
     * Name of the input.
     * 
     */
    @Import(name="name")
    private @Nullable Output<String> name;

    /**
     * @return Name of the input.
     * 
     */
    public Optional<Output<String>> name() {
        return Optional.ofNullable(this.name);
    }

    /**
     * The ARN of the role this input assumes during and after creation.
     * 
     */
    @Import(name="roleArn")
    private @Nullable Output<String> roleArn;

    /**
     * @return The ARN of the role this input assumes during and after creation.
     * 
     */
    public Optional<Output<String>> roleArn() {
        return Optional.ofNullable(this.roleArn);
    }

    /**
     * The source URLs for a PULL-type input. See Sources for more details.
     * 
     */
    @Import(name="sources")
    private @Nullable Output<List<InputSourceArgs>> sources;

    /**
     * @return The source URLs for a PULL-type input. See Sources for more details.
     * 
     */
    public Optional<Output<List<InputSourceArgs>>> sources() {
        return Optional.ofNullable(this.sources);
    }

    /**
     * A map of tags to assign to the Input. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
     * 
     */
    @Import(name="tags")
    private @Nullable Output<Map<String,String>> tags;

    /**
     * @return A map of tags to assign to the Input. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
     * 
     */
    public Optional<Output<Map<String,String>>> tags() {
        return Optional.ofNullable(this.tags);
    }

    @Import(name="tagsAll")
    private @Nullable Output<Map<String,String>> tagsAll;

    public Optional<Output<Map<String,String>>> tagsAll() {
        return Optional.ofNullable(this.tagsAll);
    }

    /**
     * The different types of inputs that AWS Elemental MediaLive supports.
     * 
     * The following arguments are optional:
     * 
     */
    @Import(name="type")
    private @Nullable Output<String> type;

    /**
     * @return The different types of inputs that AWS Elemental MediaLive supports.
     * 
     * The following arguments are optional:
     * 
     */
    public Optional<Output<String>> type() {
        return Optional.ofNullable(this.type);
    }

    /**
     * Settings for a private VPC Input. See VPC for more details.
     * 
     */
    @Import(name="vpc")
    private @Nullable Output<InputVpcArgs> vpc;

    /**
     * @return Settings for a private VPC Input. See VPC for more details.
     * 
     */
    public Optional<Output<InputVpcArgs>> vpc() {
        return Optional.ofNullable(this.vpc);
    }

    private InputState() {}

    private InputState(InputState $) {
        this.arn = $.arn;
        this.attachedChannels = $.attachedChannels;
        this.destinations = $.destinations;
        this.inputClass = $.inputClass;
        this.inputDevices = $.inputDevices;
        this.inputPartnerIds = $.inputPartnerIds;
        this.inputSecurityGroups = $.inputSecurityGroups;
        this.inputSourceType = $.inputSourceType;
        this.mediaConnectFlows = $.mediaConnectFlows;
        this.name = $.name;
        this.roleArn = $.roleArn;
        this.sources = $.sources;
        this.tags = $.tags;
        this.tagsAll = $.tagsAll;
        this.type = $.type;
        this.vpc = $.vpc;
    }

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

    public static final class Builder {
        private InputState $;

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

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

        /**
         * @param arn ARN of the Input.
         * 
         * @return builder
         * 
         */
        public Builder arn(@Nullable Output<String> arn) {
            $.arn = arn;
            return this;
        }

        /**
         * @param arn ARN of the Input.
         * 
         * @return builder
         * 
         */
        public Builder arn(String arn) {
            return arn(Output.of(arn));
        }

        /**
         * @param attachedChannels Channels attached to Input.
         * 
         * @return builder
         * 
         */
        public Builder attachedChannels(@Nullable Output<List<String>> attachedChannels) {
            $.attachedChannels = attachedChannels;
            return this;
        }

        /**
         * @param attachedChannels Channels attached to Input.
         * 
         * @return builder
         * 
         */
        public Builder attachedChannels(List<String> attachedChannels) {
            return attachedChannels(Output.of(attachedChannels));
        }

        /**
         * @param attachedChannels Channels attached to Input.
         * 
         * @return builder
         * 
         */
        public Builder attachedChannels(String... attachedChannels) {
            return attachedChannels(List.of(attachedChannels));
        }

        /**
         * @param destinations Destination settings for PUSH type inputs. See Destinations for more details.
         * 
         * @return builder
         * 
         */
        public Builder destinations(@Nullable Output<List<InputDestinationArgs>> destinations) {
            $.destinations = destinations;
            return this;
        }

        /**
         * @param destinations Destination settings for PUSH type inputs. See Destinations for more details.
         * 
         * @return builder
         * 
         */
        public Builder destinations(List<InputDestinationArgs> destinations) {
            return destinations(Output.of(destinations));
        }

        /**
         * @param destinations Destination settings for PUSH type inputs. See Destinations for more details.
         * 
         * @return builder
         * 
         */
        public Builder destinations(InputDestinationArgs... destinations) {
            return destinations(List.of(destinations));
        }

        /**
         * @param inputClass The input class.
         * 
         * @return builder
         * 
         */
        public Builder inputClass(@Nullable Output<String> inputClass) {
            $.inputClass = inputClass;
            return this;
        }

        /**
         * @param inputClass The input class.
         * 
         * @return builder
         * 
         */
        public Builder inputClass(String inputClass) {
            return inputClass(Output.of(inputClass));
        }

        /**
         * @param inputDevices Settings for the devices. See Input Devices for more details.
         * 
         * @return builder
         * 
         */
        public Builder inputDevices(@Nullable Output<List<InputInputDeviceArgs>> inputDevices) {
            $.inputDevices = inputDevices;
            return this;
        }

        /**
         * @param inputDevices Settings for the devices. See Input Devices for more details.
         * 
         * @return builder
         * 
         */
        public Builder inputDevices(List<InputInputDeviceArgs> inputDevices) {
            return inputDevices(Output.of(inputDevices));
        }

        /**
         * @param inputDevices Settings for the devices. See Input Devices for more details.
         * 
         * @return builder
         * 
         */
        public Builder inputDevices(InputInputDeviceArgs... inputDevices) {
            return inputDevices(List.of(inputDevices));
        }

        /**
         * @param inputPartnerIds A list of IDs for all Inputs which are partners of this one.
         * 
         * @return builder
         * 
         */
        public Builder inputPartnerIds(@Nullable Output<List<String>> inputPartnerIds) {
            $.inputPartnerIds = inputPartnerIds;
            return this;
        }

        /**
         * @param inputPartnerIds A list of IDs for all Inputs which are partners of this one.
         * 
         * @return builder
         * 
         */
        public Builder inputPartnerIds(List<String> inputPartnerIds) {
            return inputPartnerIds(Output.of(inputPartnerIds));
        }

        /**
         * @param inputPartnerIds A list of IDs for all Inputs which are partners of this one.
         * 
         * @return builder
         * 
         */
        public Builder inputPartnerIds(String... inputPartnerIds) {
            return inputPartnerIds(List.of(inputPartnerIds));
        }

        /**
         * @param inputSecurityGroups List of input security groups.
         * 
         * @return builder
         * 
         */
        public Builder inputSecurityGroups(@Nullable Output<List<String>> inputSecurityGroups) {
            $.inputSecurityGroups = inputSecurityGroups;
            return this;
        }

        /**
         * @param inputSecurityGroups List of input security groups.
         * 
         * @return builder
         * 
         */
        public Builder inputSecurityGroups(List<String> inputSecurityGroups) {
            return inputSecurityGroups(Output.of(inputSecurityGroups));
        }

        /**
         * @param inputSecurityGroups List of input security groups.
         * 
         * @return builder
         * 
         */
        public Builder inputSecurityGroups(String... inputSecurityGroups) {
            return inputSecurityGroups(List.of(inputSecurityGroups));
        }

        /**
         * @param inputSourceType Source type of the input.
         * 
         * @return builder
         * 
         */
        public Builder inputSourceType(@Nullable Output<String> inputSourceType) {
            $.inputSourceType = inputSourceType;
            return this;
        }

        /**
         * @param inputSourceType Source type of the input.
         * 
         * @return builder
         * 
         */
        public Builder inputSourceType(String inputSourceType) {
            return inputSourceType(Output.of(inputSourceType));
        }

        /**
         * @param mediaConnectFlows A list of the MediaConnect Flows. See Media Connect Flows for more details.
         * 
         * @return builder
         * 
         */
        public Builder mediaConnectFlows(@Nullable Output<List<InputMediaConnectFlowArgs>> mediaConnectFlows) {
            $.mediaConnectFlows = mediaConnectFlows;
            return this;
        }

        /**
         * @param mediaConnectFlows A list of the MediaConnect Flows. See Media Connect Flows for more details.
         * 
         * @return builder
         * 
         */
        public Builder mediaConnectFlows(List<InputMediaConnectFlowArgs> mediaConnectFlows) {
            return mediaConnectFlows(Output.of(mediaConnectFlows));
        }

        /**
         * @param mediaConnectFlows A list of the MediaConnect Flows. See Media Connect Flows for more details.
         * 
         * @return builder
         * 
         */
        public Builder mediaConnectFlows(InputMediaConnectFlowArgs... mediaConnectFlows) {
            return mediaConnectFlows(List.of(mediaConnectFlows));
        }

        /**
         * @param name Name of the input.
         * 
         * @return builder
         * 
         */
        public Builder name(@Nullable Output<String> name) {
            $.name = name;
            return this;
        }

        /**
         * @param name Name of the input.
         * 
         * @return builder
         * 
         */
        public Builder name(String name) {
            return name(Output.of(name));
        }

        /**
         * @param roleArn The ARN of the role this input assumes during and after creation.
         * 
         * @return builder
         * 
         */
        public Builder roleArn(@Nullable Output<String> roleArn) {
            $.roleArn = roleArn;
            return this;
        }

        /**
         * @param roleArn The ARN of the role this input assumes during and after creation.
         * 
         * @return builder
         * 
         */
        public Builder roleArn(String roleArn) {
            return roleArn(Output.of(roleArn));
        }

        /**
         * @param sources The source URLs for a PULL-type input. See Sources for more details.
         * 
         * @return builder
         * 
         */
        public Builder sources(@Nullable Output<List<InputSourceArgs>> sources) {
            $.sources = sources;
            return this;
        }

        /**
         * @param sources The source URLs for a PULL-type input. See Sources for more details.
         * 
         * @return builder
         * 
         */
        public Builder sources(List<InputSourceArgs> sources) {
            return sources(Output.of(sources));
        }

        /**
         * @param sources The source URLs for a PULL-type input. See Sources for more details.
         * 
         * @return builder
         * 
         */
        public Builder sources(InputSourceArgs... sources) {
            return sources(List.of(sources));
        }

        /**
         * @param tags A map of tags to assign to the Input. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
         * 
         * @return builder
         * 
         */
        public Builder tags(@Nullable Output<Map<String,String>> tags) {
            $.tags = tags;
            return this;
        }

        /**
         * @param tags A map of tags to assign to the Input. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
         * 
         * @return builder
         * 
         */
        public Builder tags(Map<String,String> tags) {
            return tags(Output.of(tags));
        }

        public Builder tagsAll(@Nullable Output<Map<String,String>> tagsAll) {
            $.tagsAll = tagsAll;
            return this;
        }

        public Builder tagsAll(Map<String,String> tagsAll) {
            return tagsAll(Output.of(tagsAll));
        }

        /**
         * @param type The different types of inputs that AWS Elemental MediaLive supports.
         * 
         * The following arguments are optional:
         * 
         * @return builder
         * 
         */
        public Builder type(@Nullable Output<String> type) {
            $.type = type;
            return this;
        }

        /**
         * @param type The different types of inputs that AWS Elemental MediaLive supports.
         * 
         * The following arguments are optional:
         * 
         * @return builder
         * 
         */
        public Builder type(String type) {
            return type(Output.of(type));
        }

        /**
         * @param vpc Settings for a private VPC Input. See VPC for more details.
         * 
         * @return builder
         * 
         */
        public Builder vpc(@Nullable Output<InputVpcArgs> vpc) {
            $.vpc = vpc;
            return this;
        }

        /**
         * @param vpc Settings for a private VPC Input. See VPC for more details.
         * 
         * @return builder
         * 
         */
        public Builder vpc(InputVpcArgs vpc) {
            return vpc(Output.of(vpc));
        }

        public InputState build() {
            return $;
        }
    }

}
