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

package com.azure.resourcemanager.hybridcontainerservice.models;

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

/** AAD Profile specifies attributes for Azure Active Directory integration. */
@Fluent
public final class AadProfile extends AadProfileSecret {
    /*
     * The list of AAD group object IDs that will have admin role of the cluster.
     */
    @JsonProperty(value = "adminGroupObjectIDs")
    private List<String> adminGroupObjectIDs;

    /*
     * The client AAD application ID.
     */
    @JsonProperty(value = "clientAppID")
    private String clientAppId;

    /*
     * Whether to enable Azure RBAC for Kubernetes authorization.
     */
    @JsonProperty(value = "enableAzureRbac")
    private Boolean enableAzureRbac;

    /*
     * Whether to enable managed AAD.
     */
    @JsonProperty(value = "managed")
    private Boolean managed;

    /*
     * The server AAD application ID.
     */
    @JsonProperty(value = "serverAppID")
    private String serverAppId;

    /*
     * The AAD tenant ID to use for authentication. If not specified, will use the tenant of the deployment
     * subscription.
     */
    @JsonProperty(value = "tenantID")
    private String tenantId;

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

    /**
     * Get the adminGroupObjectIDs property: The list of AAD group object IDs that will have admin role of the cluster.
     *
     * @return the adminGroupObjectIDs value.
     */
    public List<String> adminGroupObjectIDs() {
        return this.adminGroupObjectIDs;
    }

    /**
     * Set the adminGroupObjectIDs property: The list of AAD group object IDs that will have admin role of the cluster.
     *
     * @param adminGroupObjectIDs the adminGroupObjectIDs value to set.
     * @return the AadProfile object itself.
     */
    public AadProfile withAdminGroupObjectIDs(List<String> adminGroupObjectIDs) {
        this.adminGroupObjectIDs = adminGroupObjectIDs;
        return this;
    }

    /**
     * Get the clientAppId property: The client AAD application ID.
     *
     * @return the clientAppId value.
     */
    public String clientAppId() {
        return this.clientAppId;
    }

    /**
     * Set the clientAppId property: The client AAD application ID.
     *
     * @param clientAppId the clientAppId value to set.
     * @return the AadProfile object itself.
     */
    public AadProfile withClientAppId(String clientAppId) {
        this.clientAppId = clientAppId;
        return this;
    }

    /**
     * Get the enableAzureRbac property: Whether to enable Azure RBAC for Kubernetes authorization.
     *
     * @return the enableAzureRbac value.
     */
    public Boolean enableAzureRbac() {
        return this.enableAzureRbac;
    }

    /**
     * Set the enableAzureRbac property: Whether to enable Azure RBAC for Kubernetes authorization.
     *
     * @param enableAzureRbac the enableAzureRbac value to set.
     * @return the AadProfile object itself.
     */
    public AadProfile withEnableAzureRbac(Boolean enableAzureRbac) {
        this.enableAzureRbac = enableAzureRbac;
        return this;
    }

    /**
     * Get the managed property: Whether to enable managed AAD.
     *
     * @return the managed value.
     */
    public Boolean managed() {
        return this.managed;
    }

    /**
     * Set the managed property: Whether to enable managed AAD.
     *
     * @param managed the managed value to set.
     * @return the AadProfile object itself.
     */
    public AadProfile withManaged(Boolean managed) {
        this.managed = managed;
        return this;
    }

    /**
     * Get the serverAppId property: The server AAD application ID.
     *
     * @return the serverAppId value.
     */
    public String serverAppId() {
        return this.serverAppId;
    }

    /**
     * Set the serverAppId property: The server AAD application ID.
     *
     * @param serverAppId the serverAppId value to set.
     * @return the AadProfile object itself.
     */
    public AadProfile withServerAppId(String serverAppId) {
        this.serverAppId = serverAppId;
        return this;
    }

    /**
     * Get the tenantId property: The AAD tenant ID to use for authentication. If not specified, will use the tenant of
     * the deployment subscription.
     *
     * @return the tenantId value.
     */
    public String tenantId() {
        return this.tenantId;
    }

    /**
     * Set the tenantId property: The AAD tenant ID to use for authentication. If not specified, will use the tenant of
     * the deployment subscription.
     *
     * @param tenantId the tenantId value to set.
     * @return the AadProfile object itself.
     */
    public AadProfile withTenantId(String tenantId) {
        this.tenantId = tenantId;
        return this;
    }

    /** {@inheritDoc} */
    @Override
    public AadProfile withServerAppSecret(String serverAppSecret) {
        super.withServerAppSecret(serverAppSecret);
        return this;
    }

    /**
     * Validates the instance.
     *
     * @throws IllegalArgumentException thrown if the instance is not valid.
     */
    @Override
    public void validate() {
        super.validate();
    }
}
