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

import com.pulumi.aws.backup.inputs.FrameworkControlInputParameterArgs;
import com.pulumi.aws.backup.inputs.FrameworkControlScopeArgs;
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 FrameworkControlArgs extends com.pulumi.resources.ResourceArgs {

    public static final FrameworkControlArgs Empty = new FrameworkControlArgs();

    /**
     * One or more input parameter blocks. An example of a control with two parameters is: &#34;backup plan frequency is at least daily and the retention period is at least 1 year&#34;. The first parameter is daily. The second parameter is 1 year. Detailed below.
     * 
     */
    @Import(name="inputParameters")
    private @Nullable Output<List<FrameworkControlInputParameterArgs>> inputParameters;

    /**
     * @return One or more input parameter blocks. An example of a control with two parameters is: &#34;backup plan frequency is at least daily and the retention period is at least 1 year&#34;. The first parameter is daily. The second parameter is 1 year. Detailed below.
     * 
     */
    public Optional<Output<List<FrameworkControlInputParameterArgs>>> inputParameters() {
        return Optional.ofNullable(this.inputParameters);
    }

    /**
     * The unique name of the framework. The name must be between 1 and 256 characters, starting with a letter, and consisting of letters, numbers, and underscores.
     * 
     */
    @Import(name="name", required=true)
    private Output<String> name;

    /**
     * @return The unique name of the framework. The name must be between 1 and 256 characters, starting with a letter, and consisting of letters, numbers, and underscores.
     * 
     */
    public Output<String> name() {
        return this.name;
    }

    /**
     * The scope of a control. The control scope defines what the control will evaluate. Three examples of control scopes are: a specific backup plan, all backup plans with a specific tag, or all backup plans. Detailed below.
     * 
     */
    @Import(name="scope")
    private @Nullable Output<FrameworkControlScopeArgs> scope;

    /**
     * @return The scope of a control. The control scope defines what the control will evaluate. Three examples of control scopes are: a specific backup plan, all backup plans with a specific tag, or all backup plans. Detailed below.
     * 
     */
    public Optional<Output<FrameworkControlScopeArgs>> scope() {
        return Optional.ofNullable(this.scope);
    }

    private FrameworkControlArgs() {}

    private FrameworkControlArgs(FrameworkControlArgs $) {
        this.inputParameters = $.inputParameters;
        this.name = $.name;
        this.scope = $.scope;
    }

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

    public static final class Builder {
        private FrameworkControlArgs $;

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

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

        /**
         * @param inputParameters One or more input parameter blocks. An example of a control with two parameters is: &#34;backup plan frequency is at least daily and the retention period is at least 1 year&#34;. The first parameter is daily. The second parameter is 1 year. Detailed below.
         * 
         * @return builder
         * 
         */
        public Builder inputParameters(@Nullable Output<List<FrameworkControlInputParameterArgs>> inputParameters) {
            $.inputParameters = inputParameters;
            return this;
        }

        /**
         * @param inputParameters One or more input parameter blocks. An example of a control with two parameters is: &#34;backup plan frequency is at least daily and the retention period is at least 1 year&#34;. The first parameter is daily. The second parameter is 1 year. Detailed below.
         * 
         * @return builder
         * 
         */
        public Builder inputParameters(List<FrameworkControlInputParameterArgs> inputParameters) {
            return inputParameters(Output.of(inputParameters));
        }

        /**
         * @param inputParameters One or more input parameter blocks. An example of a control with two parameters is: &#34;backup plan frequency is at least daily and the retention period is at least 1 year&#34;. The first parameter is daily. The second parameter is 1 year. Detailed below.
         * 
         * @return builder
         * 
         */
        public Builder inputParameters(FrameworkControlInputParameterArgs... inputParameters) {
            return inputParameters(List.of(inputParameters));
        }

        /**
         * @param name The unique name of the framework. The name must be between 1 and 256 characters, starting with a letter, and consisting of letters, numbers, and underscores.
         * 
         * @return builder
         * 
         */
        public Builder name(Output<String> name) {
            $.name = name;
            return this;
        }

        /**
         * @param name The unique name of the framework. The name must be between 1 and 256 characters, starting with a letter, and consisting of letters, numbers, and underscores.
         * 
         * @return builder
         * 
         */
        public Builder name(String name) {
            return name(Output.of(name));
        }

        /**
         * @param scope The scope of a control. The control scope defines what the control will evaluate. Three examples of control scopes are: a specific backup plan, all backup plans with a specific tag, or all backup plans. Detailed below.
         * 
         * @return builder
         * 
         */
        public Builder scope(@Nullable Output<FrameworkControlScopeArgs> scope) {
            $.scope = scope;
            return this;
        }

        /**
         * @param scope The scope of a control. The control scope defines what the control will evaluate. Three examples of control scopes are: a specific backup plan, all backup plans with a specific tag, or all backup plans. Detailed below.
         * 
         * @return builder
         * 
         */
        public Builder scope(FrameworkControlScopeArgs scope) {
            return scope(Output.of(scope));
        }

        public FrameworkControlArgs build() {
            $.name = Objects.requireNonNull($.name, "expected parameter 'name' to be non-null");
            return $;
        }
    }

}
