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

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


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

    public static final LinuxFunctionAppSiteConfigApplicationStackArgs Empty = new LinuxFunctionAppSiteConfigApplicationStackArgs();

    /**
     * One or more `docker` blocks as defined below.
     * 
     */
    @Import(name="dockers")
    private @Nullable Output<List<LinuxFunctionAppSiteConfigApplicationStackDockerArgs>> dockers;

    /**
     * @return One or more `docker` blocks as defined below.
     * 
     */
    public Optional<Output<List<LinuxFunctionAppSiteConfigApplicationStackDockerArgs>>> dockers() {
        return Optional.ofNullable(this.dockers);
    }

    /**
     * The version of .NET to use. Possible values include `3.1`, `6.0` and `7.0`.
     * 
     */
    @Import(name="dotnetVersion")
    private @Nullable Output<String> dotnetVersion;

    /**
     * @return The version of .NET to use. Possible values include `3.1`, `6.0` and `7.0`.
     * 
     */
    public Optional<Output<String>> dotnetVersion() {
        return Optional.ofNullable(this.dotnetVersion);
    }

    /**
     * The Version of Java to use. Supported versions include `8`, `11` &amp; `17`.
     * 
     */
    @Import(name="javaVersion")
    private @Nullable Output<String> javaVersion;

    /**
     * @return The Version of Java to use. Supported versions include `8`, `11` &amp; `17`.
     * 
     */
    public Optional<Output<String>> javaVersion() {
        return Optional.ofNullable(this.javaVersion);
    }

    /**
     * The version of Node to run. Possible values include `12`, `14`, `16` and `18`.
     * 
     */
    @Import(name="nodeVersion")
    private @Nullable Output<String> nodeVersion;

    /**
     * @return The version of Node to run. Possible values include `12`, `14`, `16` and `18`.
     * 
     */
    public Optional<Output<String>> nodeVersion() {
        return Optional.ofNullable(this.nodeVersion);
    }

    /**
     * The version of PowerShell Core to run. Possible values are `7`, and `7.2`.
     * 
     */
    @Import(name="powershellCoreVersion")
    private @Nullable Output<String> powershellCoreVersion;

    /**
     * @return The version of PowerShell Core to run. Possible values are `7`, and `7.2`.
     * 
     */
    public Optional<Output<String>> powershellCoreVersion() {
        return Optional.ofNullable(this.powershellCoreVersion);
    }

    /**
     * The version of Python to run. Possible values are `3.11`, `3.10`, `3.9`, `3.8` and `3.7`.
     * 
     */
    @Import(name="pythonVersion")
    private @Nullable Output<String> pythonVersion;

    /**
     * @return The version of Python to run. Possible values are `3.11`, `3.10`, `3.9`, `3.8` and `3.7`.
     * 
     */
    public Optional<Output<String>> pythonVersion() {
        return Optional.ofNullable(this.pythonVersion);
    }

    /**
     * Should the Linux Function App use a custom runtime?
     * 
     */
    @Import(name="useCustomRuntime")
    private @Nullable Output<Boolean> useCustomRuntime;

    /**
     * @return Should the Linux Function App use a custom runtime?
     * 
     */
    public Optional<Output<Boolean>> useCustomRuntime() {
        return Optional.ofNullable(this.useCustomRuntime);
    }

    /**
     * Should the DotNet process use an isolated runtime. Defaults to `false`.
     * 
     */
    @Import(name="useDotnetIsolatedRuntime")
    private @Nullable Output<Boolean> useDotnetIsolatedRuntime;

    /**
     * @return Should the DotNet process use an isolated runtime. Defaults to `false`.
     * 
     */
    public Optional<Output<Boolean>> useDotnetIsolatedRuntime() {
        return Optional.ofNullable(this.useDotnetIsolatedRuntime);
    }

    private LinuxFunctionAppSiteConfigApplicationStackArgs() {}

    private LinuxFunctionAppSiteConfigApplicationStackArgs(LinuxFunctionAppSiteConfigApplicationStackArgs $) {
        this.dockers = $.dockers;
        this.dotnetVersion = $.dotnetVersion;
        this.javaVersion = $.javaVersion;
        this.nodeVersion = $.nodeVersion;
        this.powershellCoreVersion = $.powershellCoreVersion;
        this.pythonVersion = $.pythonVersion;
        this.useCustomRuntime = $.useCustomRuntime;
        this.useDotnetIsolatedRuntime = $.useDotnetIsolatedRuntime;
    }

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

    public static final class Builder {
        private LinuxFunctionAppSiteConfigApplicationStackArgs $;

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

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

        /**
         * @param dockers One or more `docker` blocks as defined below.
         * 
         * @return builder
         * 
         */
        public Builder dockers(@Nullable Output<List<LinuxFunctionAppSiteConfigApplicationStackDockerArgs>> dockers) {
            $.dockers = dockers;
            return this;
        }

        /**
         * @param dockers One or more `docker` blocks as defined below.
         * 
         * @return builder
         * 
         */
        public Builder dockers(List<LinuxFunctionAppSiteConfigApplicationStackDockerArgs> dockers) {
            return dockers(Output.of(dockers));
        }

        /**
         * @param dockers One or more `docker` blocks as defined below.
         * 
         * @return builder
         * 
         */
        public Builder dockers(LinuxFunctionAppSiteConfigApplicationStackDockerArgs... dockers) {
            return dockers(List.of(dockers));
        }

        /**
         * @param dotnetVersion The version of .NET to use. Possible values include `3.1`, `6.0` and `7.0`.
         * 
         * @return builder
         * 
         */
        public Builder dotnetVersion(@Nullable Output<String> dotnetVersion) {
            $.dotnetVersion = dotnetVersion;
            return this;
        }

        /**
         * @param dotnetVersion The version of .NET to use. Possible values include `3.1`, `6.0` and `7.0`.
         * 
         * @return builder
         * 
         */
        public Builder dotnetVersion(String dotnetVersion) {
            return dotnetVersion(Output.of(dotnetVersion));
        }

        /**
         * @param javaVersion The Version of Java to use. Supported versions include `8`, `11` &amp; `17`.
         * 
         * @return builder
         * 
         */
        public Builder javaVersion(@Nullable Output<String> javaVersion) {
            $.javaVersion = javaVersion;
            return this;
        }

        /**
         * @param javaVersion The Version of Java to use. Supported versions include `8`, `11` &amp; `17`.
         * 
         * @return builder
         * 
         */
        public Builder javaVersion(String javaVersion) {
            return javaVersion(Output.of(javaVersion));
        }

        /**
         * @param nodeVersion The version of Node to run. Possible values include `12`, `14`, `16` and `18`.
         * 
         * @return builder
         * 
         */
        public Builder nodeVersion(@Nullable Output<String> nodeVersion) {
            $.nodeVersion = nodeVersion;
            return this;
        }

        /**
         * @param nodeVersion The version of Node to run. Possible values include `12`, `14`, `16` and `18`.
         * 
         * @return builder
         * 
         */
        public Builder nodeVersion(String nodeVersion) {
            return nodeVersion(Output.of(nodeVersion));
        }

        /**
         * @param powershellCoreVersion The version of PowerShell Core to run. Possible values are `7`, and `7.2`.
         * 
         * @return builder
         * 
         */
        public Builder powershellCoreVersion(@Nullable Output<String> powershellCoreVersion) {
            $.powershellCoreVersion = powershellCoreVersion;
            return this;
        }

        /**
         * @param powershellCoreVersion The version of PowerShell Core to run. Possible values are `7`, and `7.2`.
         * 
         * @return builder
         * 
         */
        public Builder powershellCoreVersion(String powershellCoreVersion) {
            return powershellCoreVersion(Output.of(powershellCoreVersion));
        }

        /**
         * @param pythonVersion The version of Python to run. Possible values are `3.11`, `3.10`, `3.9`, `3.8` and `3.7`.
         * 
         * @return builder
         * 
         */
        public Builder pythonVersion(@Nullable Output<String> pythonVersion) {
            $.pythonVersion = pythonVersion;
            return this;
        }

        /**
         * @param pythonVersion The version of Python to run. Possible values are `3.11`, `3.10`, `3.9`, `3.8` and `3.7`.
         * 
         * @return builder
         * 
         */
        public Builder pythonVersion(String pythonVersion) {
            return pythonVersion(Output.of(pythonVersion));
        }

        /**
         * @param useCustomRuntime Should the Linux Function App use a custom runtime?
         * 
         * @return builder
         * 
         */
        public Builder useCustomRuntime(@Nullable Output<Boolean> useCustomRuntime) {
            $.useCustomRuntime = useCustomRuntime;
            return this;
        }

        /**
         * @param useCustomRuntime Should the Linux Function App use a custom runtime?
         * 
         * @return builder
         * 
         */
        public Builder useCustomRuntime(Boolean useCustomRuntime) {
            return useCustomRuntime(Output.of(useCustomRuntime));
        }

        /**
         * @param useDotnetIsolatedRuntime Should the DotNet process use an isolated runtime. Defaults to `false`.
         * 
         * @return builder
         * 
         */
        public Builder useDotnetIsolatedRuntime(@Nullable Output<Boolean> useDotnetIsolatedRuntime) {
            $.useDotnetIsolatedRuntime = useDotnetIsolatedRuntime;
            return this;
        }

        /**
         * @param useDotnetIsolatedRuntime Should the DotNet process use an isolated runtime. Defaults to `false`.
         * 
         * @return builder
         * 
         */
        public Builder useDotnetIsolatedRuntime(Boolean useDotnetIsolatedRuntime) {
            return useDotnetIsolatedRuntime(Output.of(useDotnetIsolatedRuntime));
        }

        public LinuxFunctionAppSiteConfigApplicationStackArgs build() {
            return $;
        }
    }

}
