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

import com.pulumi.azure.network.inputs.FirewallPolicyRuleCollectionGroupApplicationRuleCollectionArgs;
import com.pulumi.azure.network.inputs.FirewallPolicyRuleCollectionGroupNatRuleCollectionArgs;
import com.pulumi.azure.network.inputs.FirewallPolicyRuleCollectionGroupNetworkRuleCollectionArgs;
import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import java.lang.Integer;
import java.lang.String;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


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

    public static final FirewallPolicyRuleCollectionGroupState Empty = new FirewallPolicyRuleCollectionGroupState();

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

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

    /**
     * The ID of the Firewall Policy where the Firewall Policy Rule Collection Group should exist. Changing this forces a new Firewall Policy Rule Collection Group to be created.
     * 
     */
    @Import(name="firewallPolicyId")
    private @Nullable Output<String> firewallPolicyId;

    /**
     * @return The ID of the Firewall Policy where the Firewall Policy Rule Collection Group should exist. Changing this forces a new Firewall Policy Rule Collection Group to be created.
     * 
     */
    public Optional<Output<String>> firewallPolicyId() {
        return Optional.ofNullable(this.firewallPolicyId);
    }

    /**
     * The name which should be used for this Firewall Policy Rule Collection Group. Changing this forces a new Firewall Policy Rule Collection Group to be created.
     * 
     */
    @Import(name="name")
    private @Nullable Output<String> name;

    /**
     * @return The name which should be used for this Firewall Policy Rule Collection Group. Changing this forces a new Firewall Policy Rule Collection Group to be created.
     * 
     */
    public Optional<Output<String>> name() {
        return Optional.ofNullable(this.name);
    }

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

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

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

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

    /**
     * The priority of the Firewall Policy Rule Collection Group. The range is 100-65000.
     * 
     */
    @Import(name="priority")
    private @Nullable Output<Integer> priority;

    /**
     * @return The priority of the Firewall Policy Rule Collection Group. The range is 100-65000.
     * 
     */
    public Optional<Output<Integer>> priority() {
        return Optional.ofNullable(this.priority);
    }

    private FirewallPolicyRuleCollectionGroupState() {}

    private FirewallPolicyRuleCollectionGroupState(FirewallPolicyRuleCollectionGroupState $) {
        this.applicationRuleCollections = $.applicationRuleCollections;
        this.firewallPolicyId = $.firewallPolicyId;
        this.name = $.name;
        this.natRuleCollections = $.natRuleCollections;
        this.networkRuleCollections = $.networkRuleCollections;
        this.priority = $.priority;
    }

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

    public static final class Builder {
        private FirewallPolicyRuleCollectionGroupState $;

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

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

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

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

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

        /**
         * @param firewallPolicyId The ID of the Firewall Policy where the Firewall Policy Rule Collection Group should exist. Changing this forces a new Firewall Policy Rule Collection Group to be created.
         * 
         * @return builder
         * 
         */
        public Builder firewallPolicyId(@Nullable Output<String> firewallPolicyId) {
            $.firewallPolicyId = firewallPolicyId;
            return this;
        }

        /**
         * @param firewallPolicyId The ID of the Firewall Policy where the Firewall Policy Rule Collection Group should exist. Changing this forces a new Firewall Policy Rule Collection Group to be created.
         * 
         * @return builder
         * 
         */
        public Builder firewallPolicyId(String firewallPolicyId) {
            return firewallPolicyId(Output.of(firewallPolicyId));
        }

        /**
         * @param name The name which should be used for this Firewall Policy Rule Collection Group. Changing this forces a new Firewall Policy Rule Collection Group to be created.
         * 
         * @return builder
         * 
         */
        public Builder name(@Nullable Output<String> name) {
            $.name = name;
            return this;
        }

        /**
         * @param name The name which should be used for this Firewall Policy Rule Collection Group. Changing this forces a new Firewall Policy Rule Collection Group to be created.
         * 
         * @return builder
         * 
         */
        public Builder name(String name) {
            return name(Output.of(name));
        }

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

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

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

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

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

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

        /**
         * @param priority The priority of the Firewall Policy Rule Collection Group. The range is 100-65000.
         * 
         * @return builder
         * 
         */
        public Builder priority(@Nullable Output<Integer> priority) {
            $.priority = priority;
            return this;
        }

        /**
         * @param priority The priority of the Firewall Policy Rule Collection Group. The range is 100-65000.
         * 
         * @return builder
         * 
         */
        public Builder priority(Integer priority) {
            return priority(Output.of(priority));
        }

        public FirewallPolicyRuleCollectionGroupState build() {
            return $;
        }
    }

}
