// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
// Code generated by Microsoft (R) AutoRest Code Generator.

package com.azure.resourcemanager.paloaltonetworks.ngfw.models;

import com.azure.core.annotation.Fluent;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.List;

/** The updatable properties of the LocalRulestackResource. */
@Fluent
public final class LocalRulestackResourceUpdateProperties {
    /*
     * PanEtag info
     */
    @JsonProperty(value = "panEtag")
    private String panEtag;

    /*
     * Rulestack Location, Required for GlobalRulestacks, Not for LocalRulestacks
     */
    @JsonProperty(value = "panLocation")
    private String panLocation;

    /*
     * Rulestack Type
     */
    @JsonProperty(value = "scope")
    private ScopeType scope;

    /*
     * subscription scope of global rulestack
     */
    @JsonProperty(value = "associatedSubscriptions")
    private List<String> associatedSubscriptions;

    /*
     * rulestack description
     */
    @JsonProperty(value = "description")
    private String description;

    /*
     * Mode for default rules creation
     */
    @JsonProperty(value = "defaultMode")
    private DefaultMode defaultMode;

    /*
     * minimum version
     */
    @JsonProperty(value = "minAppIdVersion")
    private String minAppIdVersion;

    /*
     * Security Profile
     */
    @JsonProperty(value = "securityServices")
    private SecurityServices securityServices;

    /** Creates an instance of LocalRulestackResourceUpdateProperties class. */
    public LocalRulestackResourceUpdateProperties() {
    }

    /**
     * Get the panEtag property: PanEtag info.
     *
     * @return the panEtag value.
     */
    public String panEtag() {
        return this.panEtag;
    }

    /**
     * Set the panEtag property: PanEtag info.
     *
     * @param panEtag the panEtag value to set.
     * @return the LocalRulestackResourceUpdateProperties object itself.
     */
    public LocalRulestackResourceUpdateProperties withPanEtag(String panEtag) {
        this.panEtag = panEtag;
        return this;
    }

    /**
     * Get the panLocation property: Rulestack Location, Required for GlobalRulestacks, Not for LocalRulestacks.
     *
     * @return the panLocation value.
     */
    public String panLocation() {
        return this.panLocation;
    }

    /**
     * Set the panLocation property: Rulestack Location, Required for GlobalRulestacks, Not for LocalRulestacks.
     *
     * @param panLocation the panLocation value to set.
     * @return the LocalRulestackResourceUpdateProperties object itself.
     */
    public LocalRulestackResourceUpdateProperties withPanLocation(String panLocation) {
        this.panLocation = panLocation;
        return this;
    }

    /**
     * Get the scope property: Rulestack Type.
     *
     * @return the scope value.
     */
    public ScopeType scope() {
        return this.scope;
    }

    /**
     * Set the scope property: Rulestack Type.
     *
     * @param scope the scope value to set.
     * @return the LocalRulestackResourceUpdateProperties object itself.
     */
    public LocalRulestackResourceUpdateProperties withScope(ScopeType scope) {
        this.scope = scope;
        return this;
    }

    /**
     * Get the associatedSubscriptions property: subscription scope of global rulestack.
     *
     * @return the associatedSubscriptions value.
     */
    public List<String> associatedSubscriptions() {
        return this.associatedSubscriptions;
    }

    /**
     * Set the associatedSubscriptions property: subscription scope of global rulestack.
     *
     * @param associatedSubscriptions the associatedSubscriptions value to set.
     * @return the LocalRulestackResourceUpdateProperties object itself.
     */
    public LocalRulestackResourceUpdateProperties withAssociatedSubscriptions(List<String> associatedSubscriptions) {
        this.associatedSubscriptions = associatedSubscriptions;
        return this;
    }

    /**
     * Get the description property: rulestack description.
     *
     * @return the description value.
     */
    public String description() {
        return this.description;
    }

    /**
     * Set the description property: rulestack description.
     *
     * @param description the description value to set.
     * @return the LocalRulestackResourceUpdateProperties object itself.
     */
    public LocalRulestackResourceUpdateProperties withDescription(String description) {
        this.description = description;
        return this;
    }

    /**
     * Get the defaultMode property: Mode for default rules creation.
     *
     * @return the defaultMode value.
     */
    public DefaultMode defaultMode() {
        return this.defaultMode;
    }

    /**
     * Set the defaultMode property: Mode for default rules creation.
     *
     * @param defaultMode the defaultMode value to set.
     * @return the LocalRulestackResourceUpdateProperties object itself.
     */
    public LocalRulestackResourceUpdateProperties withDefaultMode(DefaultMode defaultMode) {
        this.defaultMode = defaultMode;
        return this;
    }

    /**
     * Get the minAppIdVersion property: minimum version.
     *
     * @return the minAppIdVersion value.
     */
    public String minAppIdVersion() {
        return this.minAppIdVersion;
    }

    /**
     * Set the minAppIdVersion property: minimum version.
     *
     * @param minAppIdVersion the minAppIdVersion value to set.
     * @return the LocalRulestackResourceUpdateProperties object itself.
     */
    public LocalRulestackResourceUpdateProperties withMinAppIdVersion(String minAppIdVersion) {
        this.minAppIdVersion = minAppIdVersion;
        return this;
    }

    /**
     * Get the securityServices property: Security Profile.
     *
     * @return the securityServices value.
     */
    public SecurityServices securityServices() {
        return this.securityServices;
    }

    /**
     * Set the securityServices property: Security Profile.
     *
     * @param securityServices the securityServices value to set.
     * @return the LocalRulestackResourceUpdateProperties object itself.
     */
    public LocalRulestackResourceUpdateProperties withSecurityServices(SecurityServices securityServices) {
        this.securityServices = securityServices;
        return this;
    }

    /**
     * Validates the instance.
     *
     * @throws IllegalArgumentException thrown if the instance is not valid.
     */
    public void validate() {
        if (securityServices() != null) {
            securityServices().validate();
        }
    }
}
