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

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 EndpointState extends com.pulumi.resources.ResourceArgs {

    public static final EndpointState Empty = new EndpointState();

    /**
     * Creation timestamp in RFC 3339 text format.
     * 
     */
    @Import(name="createTime")
    private @Nullable Output<String> createTime;

    /**
     * @return Creation timestamp in RFC 3339 text format.
     * 
     */
    public Optional<Output<String>> createTime() {
        return Optional.ofNullable(this.createTime);
    }

    /**
     * An optional description of the endpoint.
     * 
     */
    @Import(name="description")
    private @Nullable Output<String> description;

    /**
     * @return An optional description of the endpoint.
     * 
     */
    public Optional<Output<String>> description() {
        return Optional.ofNullable(this.description);
    }

    /**
     * URL of the endpoint&#39;s network address to which traffic is to be sent by Packet Mirroring.
     * 
     */
    @Import(name="endpointForwardingRule")
    private @Nullable Output<String> endpointForwardingRule;

    /**
     * @return URL of the endpoint&#39;s network address to which traffic is to be sent by Packet Mirroring.
     * 
     */
    public Optional<Output<String>> endpointForwardingRule() {
        return Optional.ofNullable(this.endpointForwardingRule);
    }

    /**
     * Internal IP address of the endpoint&#39;s network entry point.
     * 
     */
    @Import(name="endpointIp")
    private @Nullable Output<String> endpointIp;

    /**
     * @return Internal IP address of the endpoint&#39;s network entry point.
     * 
     */
    public Optional<Output<String>> endpointIp() {
        return Optional.ofNullable(this.endpointIp);
    }

    /**
     * The location for the endpoint.
     * 
     * ***
     * 
     */
    @Import(name="location")
    private @Nullable Output<String> location;

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

    /**
     * Name of the endpoint in the format projects/{project_id}/locations/{locationId}/endpoints/{endpointId}.
     * 
     */
    @Import(name="name")
    private @Nullable Output<String> name;

    /**
     * @return Name of the endpoint in the format projects/{project_id}/locations/{locationId}/endpoints/{endpointId}.
     * 
     */
    public Optional<Output<String>> name() {
        return Optional.ofNullable(this.name);
    }

    /**
     * Name of the VPC network that is connected to the IDS endpoint. This can either contain the VPC network name itself (like &#34;src-net&#34;) or the full URL to the network (like &#34;projects/{project_id}/global/networks/src-net&#34;).
     * 
     */
    @Import(name="network")
    private @Nullable Output<String> network;

    /**
     * @return Name of the VPC network that is connected to the IDS endpoint. This can either contain the VPC network name itself (like &#34;src-net&#34;) or the full URL to the network (like &#34;projects/{project_id}/global/networks/src-net&#34;).
     * 
     */
    public Optional<Output<String>> network() {
        return Optional.ofNullable(this.network);
    }

    /**
     * The ID of the project in which the resource belongs.
     * If it is not provided, the provider project is used.
     * 
     */
    @Import(name="project")
    private @Nullable Output<String> project;

    /**
     * @return The ID of the project in which the resource belongs.
     * If it is not provided, the provider project is used.
     * 
     */
    public Optional<Output<String>> project() {
        return Optional.ofNullable(this.project);
    }

    /**
     * The minimum alert severity level that is reported by the endpoint.
     * Possible values are: `INFORMATIONAL`, `LOW`, `MEDIUM`, `HIGH`, `CRITICAL`.
     * 
     */
    @Import(name="severity")
    private @Nullable Output<String> severity;

    /**
     * @return The minimum alert severity level that is reported by the endpoint.
     * Possible values are: `INFORMATIONAL`, `LOW`, `MEDIUM`, `HIGH`, `CRITICAL`.
     * 
     */
    public Optional<Output<String>> severity() {
        return Optional.ofNullable(this.severity);
    }

    /**
     * Configuration for threat IDs excluded from generating alerts. Limit: 99 IDs.
     * 
     */
    @Import(name="threatExceptions")
    private @Nullable Output<List<String>> threatExceptions;

    /**
     * @return Configuration for threat IDs excluded from generating alerts. Limit: 99 IDs.
     * 
     */
    public Optional<Output<List<String>>> threatExceptions() {
        return Optional.ofNullable(this.threatExceptions);
    }

    /**
     * Last update timestamp in RFC 3339 text format.
     * 
     */
    @Import(name="updateTime")
    private @Nullable Output<String> updateTime;

    /**
     * @return Last update timestamp in RFC 3339 text format.
     * 
     */
    public Optional<Output<String>> updateTime() {
        return Optional.ofNullable(this.updateTime);
    }

    private EndpointState() {}

    private EndpointState(EndpointState $) {
        this.createTime = $.createTime;
        this.description = $.description;
        this.endpointForwardingRule = $.endpointForwardingRule;
        this.endpointIp = $.endpointIp;
        this.location = $.location;
        this.name = $.name;
        this.network = $.network;
        this.project = $.project;
        this.severity = $.severity;
        this.threatExceptions = $.threatExceptions;
        this.updateTime = $.updateTime;
    }

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

    public static final class Builder {
        private EndpointState $;

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

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

        /**
         * @param createTime Creation timestamp in RFC 3339 text format.
         * 
         * @return builder
         * 
         */
        public Builder createTime(@Nullable Output<String> createTime) {
            $.createTime = createTime;
            return this;
        }

        /**
         * @param createTime Creation timestamp in RFC 3339 text format.
         * 
         * @return builder
         * 
         */
        public Builder createTime(String createTime) {
            return createTime(Output.of(createTime));
        }

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

        /**
         * @param description An optional description of the endpoint.
         * 
         * @return builder
         * 
         */
        public Builder description(String description) {
            return description(Output.of(description));
        }

        /**
         * @param endpointForwardingRule URL of the endpoint&#39;s network address to which traffic is to be sent by Packet Mirroring.
         * 
         * @return builder
         * 
         */
        public Builder endpointForwardingRule(@Nullable Output<String> endpointForwardingRule) {
            $.endpointForwardingRule = endpointForwardingRule;
            return this;
        }

        /**
         * @param endpointForwardingRule URL of the endpoint&#39;s network address to which traffic is to be sent by Packet Mirroring.
         * 
         * @return builder
         * 
         */
        public Builder endpointForwardingRule(String endpointForwardingRule) {
            return endpointForwardingRule(Output.of(endpointForwardingRule));
        }

        /**
         * @param endpointIp Internal IP address of the endpoint&#39;s network entry point.
         * 
         * @return builder
         * 
         */
        public Builder endpointIp(@Nullable Output<String> endpointIp) {
            $.endpointIp = endpointIp;
            return this;
        }

        /**
         * @param endpointIp Internal IP address of the endpoint&#39;s network entry point.
         * 
         * @return builder
         * 
         */
        public Builder endpointIp(String endpointIp) {
            return endpointIp(Output.of(endpointIp));
        }

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

        /**
         * @param location The location for the endpoint.
         * 
         * ***
         * 
         * @return builder
         * 
         */
        public Builder location(String location) {
            return location(Output.of(location));
        }

        /**
         * @param name Name of the endpoint in the format projects/{project_id}/locations/{locationId}/endpoints/{endpointId}.
         * 
         * @return builder
         * 
         */
        public Builder name(@Nullable Output<String> name) {
            $.name = name;
            return this;
        }

        /**
         * @param name Name of the endpoint in the format projects/{project_id}/locations/{locationId}/endpoints/{endpointId}.
         * 
         * @return builder
         * 
         */
        public Builder name(String name) {
            return name(Output.of(name));
        }

        /**
         * @param network Name of the VPC network that is connected to the IDS endpoint. This can either contain the VPC network name itself (like &#34;src-net&#34;) or the full URL to the network (like &#34;projects/{project_id}/global/networks/src-net&#34;).
         * 
         * @return builder
         * 
         */
        public Builder network(@Nullable Output<String> network) {
            $.network = network;
            return this;
        }

        /**
         * @param network Name of the VPC network that is connected to the IDS endpoint. This can either contain the VPC network name itself (like &#34;src-net&#34;) or the full URL to the network (like &#34;projects/{project_id}/global/networks/src-net&#34;).
         * 
         * @return builder
         * 
         */
        public Builder network(String network) {
            return network(Output.of(network));
        }

        /**
         * @param project The ID of the project in which the resource belongs.
         * If it is not provided, the provider project is used.
         * 
         * @return builder
         * 
         */
        public Builder project(@Nullable Output<String> project) {
            $.project = project;
            return this;
        }

        /**
         * @param project The ID of the project in which the resource belongs.
         * If it is not provided, the provider project is used.
         * 
         * @return builder
         * 
         */
        public Builder project(String project) {
            return project(Output.of(project));
        }

        /**
         * @param severity The minimum alert severity level that is reported by the endpoint.
         * Possible values are: `INFORMATIONAL`, `LOW`, `MEDIUM`, `HIGH`, `CRITICAL`.
         * 
         * @return builder
         * 
         */
        public Builder severity(@Nullable Output<String> severity) {
            $.severity = severity;
            return this;
        }

        /**
         * @param severity The minimum alert severity level that is reported by the endpoint.
         * Possible values are: `INFORMATIONAL`, `LOW`, `MEDIUM`, `HIGH`, `CRITICAL`.
         * 
         * @return builder
         * 
         */
        public Builder severity(String severity) {
            return severity(Output.of(severity));
        }

        /**
         * @param threatExceptions Configuration for threat IDs excluded from generating alerts. Limit: 99 IDs.
         * 
         * @return builder
         * 
         */
        public Builder threatExceptions(@Nullable Output<List<String>> threatExceptions) {
            $.threatExceptions = threatExceptions;
            return this;
        }

        /**
         * @param threatExceptions Configuration for threat IDs excluded from generating alerts. Limit: 99 IDs.
         * 
         * @return builder
         * 
         */
        public Builder threatExceptions(List<String> threatExceptions) {
            return threatExceptions(Output.of(threatExceptions));
        }

        /**
         * @param threatExceptions Configuration for threat IDs excluded from generating alerts. Limit: 99 IDs.
         * 
         * @return builder
         * 
         */
        public Builder threatExceptions(String... threatExceptions) {
            return threatExceptions(List.of(threatExceptions));
        }

        /**
         * @param updateTime Last update timestamp in RFC 3339 text format.
         * 
         * @return builder
         * 
         */
        public Builder updateTime(@Nullable Output<String> updateTime) {
            $.updateTime = updateTime;
            return this;
        }

        /**
         * @param updateTime Last update timestamp in RFC 3339 text format.
         * 
         * @return builder
         * 
         */
        public Builder updateTime(String updateTime) {
            return updateTime(Output.of(updateTime));
        }

        public EndpointState build() {
            return $;
        }
    }

}
