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

import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import com.pulumi.gcp.diagflow.inputs.CxWebhookGenericWebServiceArgs;
import com.pulumi.gcp.diagflow.inputs.CxWebhookServiceDirectoryArgs;
import java.lang.Boolean;
import java.lang.String;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


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

    public static final CxWebhookState Empty = new CxWebhookState();

    /**
     * Indicates whether the webhook is disabled.
     * 
     */
    @Import(name="disabled")
    private @Nullable Output<Boolean> disabled;

    /**
     * @return Indicates whether the webhook is disabled.
     * 
     */
    public Optional<Output<Boolean>> disabled() {
        return Optional.ofNullable(this.disabled);
    }

    /**
     * The human-readable name of the webhook, unique within the agent.
     * 
     * ***
     * 
     */
    @Import(name="displayName")
    private @Nullable Output<String> displayName;

    /**
     * @return The human-readable name of the webhook, unique within the agent.
     * 
     * ***
     * 
     */
    public Optional<Output<String>> displayName() {
        return Optional.ofNullable(this.displayName);
    }

    /**
     * Indicates if automatic spell correction is enabled in detect intent requests.
     * 
     */
    @Import(name="enableSpellCorrection")
    private @Nullable Output<Boolean> enableSpellCorrection;

    /**
     * @return Indicates if automatic spell correction is enabled in detect intent requests.
     * 
     */
    public Optional<Output<Boolean>> enableSpellCorrection() {
        return Optional.ofNullable(this.enableSpellCorrection);
    }

    /**
     * Determines whether this agent should log conversation queries.
     * 
     */
    @Import(name="enableStackdriverLogging")
    private @Nullable Output<Boolean> enableStackdriverLogging;

    /**
     * @return Determines whether this agent should log conversation queries.
     * 
     */
    public Optional<Output<Boolean>> enableStackdriverLogging() {
        return Optional.ofNullable(this.enableStackdriverLogging);
    }

    /**
     * Configuration for a generic web service.
     * Structure is documented below.
     * 
     */
    @Import(name="genericWebService")
    private @Nullable Output<CxWebhookGenericWebServiceArgs> genericWebService;

    /**
     * @return Configuration for a generic web service.
     * Structure is documented below.
     * 
     */
    public Optional<Output<CxWebhookGenericWebServiceArgs>> genericWebService() {
        return Optional.ofNullable(this.genericWebService);
    }

    /**
     * The unique identifier of the webhook.
     * Format: projects/&lt;Project ID&gt;/locations/&lt;Location ID&gt;/agents/&lt;Agent ID&gt;/webhooks/&lt;Webhook ID&gt;.
     * 
     */
    @Import(name="name")
    private @Nullable Output<String> name;

    /**
     * @return The unique identifier of the webhook.
     * Format: projects/&lt;Project ID&gt;/locations/&lt;Location ID&gt;/agents/&lt;Agent ID&gt;/webhooks/&lt;Webhook ID&gt;.
     * 
     */
    public Optional<Output<String>> name() {
        return Optional.ofNullable(this.name);
    }

    /**
     * The agent to create a webhook for.
     * Format: projects/&lt;Project ID&gt;/locations/&lt;Location ID&gt;/agents/&lt;Agent ID&gt;.
     * 
     */
    @Import(name="parent")
    private @Nullable Output<String> parent;

    /**
     * @return The agent to create a webhook for.
     * Format: projects/&lt;Project ID&gt;/locations/&lt;Location ID&gt;/agents/&lt;Agent ID&gt;.
     * 
     */
    public Optional<Output<String>> parent() {
        return Optional.ofNullable(this.parent);
    }

    /**
     * Name of the SecuritySettings reference for the agent. Format: projects/&lt;Project ID&gt;/locations/&lt;Location ID&gt;/securitySettings/&lt;Security Settings ID&gt;.
     * 
     */
    @Import(name="securitySettings")
    private @Nullable Output<String> securitySettings;

    /**
     * @return Name of the SecuritySettings reference for the agent. Format: projects/&lt;Project ID&gt;/locations/&lt;Location ID&gt;/securitySettings/&lt;Security Settings ID&gt;.
     * 
     */
    public Optional<Output<String>> securitySettings() {
        return Optional.ofNullable(this.securitySettings);
    }

    /**
     * Configuration for a Service Directory service.
     * Structure is documented below.
     * 
     */
    @Import(name="serviceDirectory")
    private @Nullable Output<CxWebhookServiceDirectoryArgs> serviceDirectory;

    /**
     * @return Configuration for a Service Directory service.
     * Structure is documented below.
     * 
     */
    public Optional<Output<CxWebhookServiceDirectoryArgs>> serviceDirectory() {
        return Optional.ofNullable(this.serviceDirectory);
    }

    /**
     * Name of the start flow in this agent. A start flow will be automatically created when the agent is created, and can only be deleted by deleting the agent. Format: projects/&lt;Project ID&gt;/locations/&lt;Location ID&gt;/agents/&lt;Agent ID&gt;/flows/&lt;Flow ID&gt;.
     * 
     */
    @Import(name="startFlow")
    private @Nullable Output<String> startFlow;

    /**
     * @return Name of the start flow in this agent. A start flow will be automatically created when the agent is created, and can only be deleted by deleting the agent. Format: projects/&lt;Project ID&gt;/locations/&lt;Location ID&gt;/agents/&lt;Agent ID&gt;/flows/&lt;Flow ID&gt;.
     * 
     */
    public Optional<Output<String>> startFlow() {
        return Optional.ofNullable(this.startFlow);
    }

    /**
     * Webhook execution timeout.
     * 
     */
    @Import(name="timeout")
    private @Nullable Output<String> timeout;

    /**
     * @return Webhook execution timeout.
     * 
     */
    public Optional<Output<String>> timeout() {
        return Optional.ofNullable(this.timeout);
    }

    private CxWebhookState() {}

    private CxWebhookState(CxWebhookState $) {
        this.disabled = $.disabled;
        this.displayName = $.displayName;
        this.enableSpellCorrection = $.enableSpellCorrection;
        this.enableStackdriverLogging = $.enableStackdriverLogging;
        this.genericWebService = $.genericWebService;
        this.name = $.name;
        this.parent = $.parent;
        this.securitySettings = $.securitySettings;
        this.serviceDirectory = $.serviceDirectory;
        this.startFlow = $.startFlow;
        this.timeout = $.timeout;
    }

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

    public static final class Builder {
        private CxWebhookState $;

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

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

        /**
         * @param disabled Indicates whether the webhook is disabled.
         * 
         * @return builder
         * 
         */
        public Builder disabled(@Nullable Output<Boolean> disabled) {
            $.disabled = disabled;
            return this;
        }

        /**
         * @param disabled Indicates whether the webhook is disabled.
         * 
         * @return builder
         * 
         */
        public Builder disabled(Boolean disabled) {
            return disabled(Output.of(disabled));
        }

        /**
         * @param displayName The human-readable name of the webhook, unique within the agent.
         * 
         * ***
         * 
         * @return builder
         * 
         */
        public Builder displayName(@Nullable Output<String> displayName) {
            $.displayName = displayName;
            return this;
        }

        /**
         * @param displayName The human-readable name of the webhook, unique within the agent.
         * 
         * ***
         * 
         * @return builder
         * 
         */
        public Builder displayName(String displayName) {
            return displayName(Output.of(displayName));
        }

        /**
         * @param enableSpellCorrection Indicates if automatic spell correction is enabled in detect intent requests.
         * 
         * @return builder
         * 
         */
        public Builder enableSpellCorrection(@Nullable Output<Boolean> enableSpellCorrection) {
            $.enableSpellCorrection = enableSpellCorrection;
            return this;
        }

        /**
         * @param enableSpellCorrection Indicates if automatic spell correction is enabled in detect intent requests.
         * 
         * @return builder
         * 
         */
        public Builder enableSpellCorrection(Boolean enableSpellCorrection) {
            return enableSpellCorrection(Output.of(enableSpellCorrection));
        }

        /**
         * @param enableStackdriverLogging Determines whether this agent should log conversation queries.
         * 
         * @return builder
         * 
         */
        public Builder enableStackdriverLogging(@Nullable Output<Boolean> enableStackdriverLogging) {
            $.enableStackdriverLogging = enableStackdriverLogging;
            return this;
        }

        /**
         * @param enableStackdriverLogging Determines whether this agent should log conversation queries.
         * 
         * @return builder
         * 
         */
        public Builder enableStackdriverLogging(Boolean enableStackdriverLogging) {
            return enableStackdriverLogging(Output.of(enableStackdriverLogging));
        }

        /**
         * @param genericWebService Configuration for a generic web service.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder genericWebService(@Nullable Output<CxWebhookGenericWebServiceArgs> genericWebService) {
            $.genericWebService = genericWebService;
            return this;
        }

        /**
         * @param genericWebService Configuration for a generic web service.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder genericWebService(CxWebhookGenericWebServiceArgs genericWebService) {
            return genericWebService(Output.of(genericWebService));
        }

        /**
         * @param name The unique identifier of the webhook.
         * Format: projects/&lt;Project ID&gt;/locations/&lt;Location ID&gt;/agents/&lt;Agent ID&gt;/webhooks/&lt;Webhook ID&gt;.
         * 
         * @return builder
         * 
         */
        public Builder name(@Nullable Output<String> name) {
            $.name = name;
            return this;
        }

        /**
         * @param name The unique identifier of the webhook.
         * Format: projects/&lt;Project ID&gt;/locations/&lt;Location ID&gt;/agents/&lt;Agent ID&gt;/webhooks/&lt;Webhook ID&gt;.
         * 
         * @return builder
         * 
         */
        public Builder name(String name) {
            return name(Output.of(name));
        }

        /**
         * @param parent The agent to create a webhook for.
         * Format: projects/&lt;Project ID&gt;/locations/&lt;Location ID&gt;/agents/&lt;Agent ID&gt;.
         * 
         * @return builder
         * 
         */
        public Builder parent(@Nullable Output<String> parent) {
            $.parent = parent;
            return this;
        }

        /**
         * @param parent The agent to create a webhook for.
         * Format: projects/&lt;Project ID&gt;/locations/&lt;Location ID&gt;/agents/&lt;Agent ID&gt;.
         * 
         * @return builder
         * 
         */
        public Builder parent(String parent) {
            return parent(Output.of(parent));
        }

        /**
         * @param securitySettings Name of the SecuritySettings reference for the agent. Format: projects/&lt;Project ID&gt;/locations/&lt;Location ID&gt;/securitySettings/&lt;Security Settings ID&gt;.
         * 
         * @return builder
         * 
         */
        public Builder securitySettings(@Nullable Output<String> securitySettings) {
            $.securitySettings = securitySettings;
            return this;
        }

        /**
         * @param securitySettings Name of the SecuritySettings reference for the agent. Format: projects/&lt;Project ID&gt;/locations/&lt;Location ID&gt;/securitySettings/&lt;Security Settings ID&gt;.
         * 
         * @return builder
         * 
         */
        public Builder securitySettings(String securitySettings) {
            return securitySettings(Output.of(securitySettings));
        }

        /**
         * @param serviceDirectory Configuration for a Service Directory service.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder serviceDirectory(@Nullable Output<CxWebhookServiceDirectoryArgs> serviceDirectory) {
            $.serviceDirectory = serviceDirectory;
            return this;
        }

        /**
         * @param serviceDirectory Configuration for a Service Directory service.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder serviceDirectory(CxWebhookServiceDirectoryArgs serviceDirectory) {
            return serviceDirectory(Output.of(serviceDirectory));
        }

        /**
         * @param startFlow Name of the start flow in this agent. A start flow will be automatically created when the agent is created, and can only be deleted by deleting the agent. Format: projects/&lt;Project ID&gt;/locations/&lt;Location ID&gt;/agents/&lt;Agent ID&gt;/flows/&lt;Flow ID&gt;.
         * 
         * @return builder
         * 
         */
        public Builder startFlow(@Nullable Output<String> startFlow) {
            $.startFlow = startFlow;
            return this;
        }

        /**
         * @param startFlow Name of the start flow in this agent. A start flow will be automatically created when the agent is created, and can only be deleted by deleting the agent. Format: projects/&lt;Project ID&gt;/locations/&lt;Location ID&gt;/agents/&lt;Agent ID&gt;/flows/&lt;Flow ID&gt;.
         * 
         * @return builder
         * 
         */
        public Builder startFlow(String startFlow) {
            return startFlow(Output.of(startFlow));
        }

        /**
         * @param timeout Webhook execution timeout.
         * 
         * @return builder
         * 
         */
        public Builder timeout(@Nullable Output<String> timeout) {
            $.timeout = timeout;
            return this;
        }

        /**
         * @param timeout Webhook execution timeout.
         * 
         * @return builder
         * 
         */
        public Builder timeout(String timeout) {
            return timeout(Output.of(timeout));
        }

        public CxWebhookState build() {
            return $;
        }
    }

}
