/**
 * Copyright (c) HashiCorp, Inc.
 * SPDX-License-Identifier: MPL-2.0
 */
import { Construct } from 'constructs';
import * as cdktf from 'cdktf';
export interface GroupConfig extends cdktf.TerraformMetaArguments {
    /**
    * The administrative unit IDs in which the group should be. If empty, the group will be created at the tenant level.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/azuread/3.3.0/docs/resources/group#administrative_unit_ids Group#administrative_unit_ids}
    */
    readonly administrativeUnitIds?: string[];
    /**
    * Indicates whether this group can be assigned to an Azure Active Directory role. This property can only be `true` for security-enabled groups.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/azuread/3.3.0/docs/resources/group#assignable_to_role Group#assignable_to_role}
    */
    readonly assignableToRole?: boolean | cdktf.IResolvable;
    /**
    * Indicates whether new members added to the group will be auto-subscribed to receive email notifications.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/azuread/3.3.0/docs/resources/group#auto_subscribe_new_members Group#auto_subscribe_new_members}
    */
    readonly autoSubscribeNewMembers?: boolean | cdktf.IResolvable;
    /**
    * The group behaviours for a Microsoft 365 group
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/azuread/3.3.0/docs/resources/group#behaviors Group#behaviors}
    */
    readonly behaviors?: string[];
    /**
    * The description for the group
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/azuread/3.3.0/docs/resources/group#description Group#description}
    */
    readonly description?: string;
    /**
    * The display name for the group
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/azuread/3.3.0/docs/resources/group#display_name Group#display_name}
    */
    readonly displayName: string;
    /**
    * Indicates whether people external to the organization can send messages to the group.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/azuread/3.3.0/docs/resources/group#external_senders_allowed Group#external_senders_allowed}
    */
    readonly externalSendersAllowed?: boolean | cdktf.IResolvable;
    /**
    * Indicates whether the group is displayed in certain parts of the Outlook user interface: in the Address Book, in address lists for selecting message recipients, and in the Browse Groups dialog for searching groups.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/azuread/3.3.0/docs/resources/group#hide_from_address_lists Group#hide_from_address_lists}
    */
    readonly hideFromAddressLists?: boolean | cdktf.IResolvable;
    /**
    * Indicates whether the group is displayed in Outlook clients, such as Outlook for Windows and Outlook on the web.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/azuread/3.3.0/docs/resources/group#hide_from_outlook_clients Group#hide_from_outlook_clients}
    */
    readonly hideFromOutlookClients?: boolean | cdktf.IResolvable;
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/azuread/3.3.0/docs/resources/group#id Group#id}
    *
    * Please be aware that the id field is automatically added to all resources in Terraform providers using a Terraform provider SDK version below 2.
    * If you experience problems setting this value it might not be settable. Please take a look at the provider documentation to ensure it should be settable.
    */
    readonly id?: string;
    /**
    * Whether the group is a mail enabled, with a shared group mailbox. At least one of `mail_enabled` or `security_enabled` must be specified. A group can be mail enabled _and_ security enabled
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/azuread/3.3.0/docs/resources/group#mail_enabled Group#mail_enabled}
    */
    readonly mailEnabled?: boolean | cdktf.IResolvable;
    /**
    * The mail alias for the group, unique in the organisation
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/azuread/3.3.0/docs/resources/group#mail_nickname Group#mail_nickname}
    */
    readonly mailNickname?: string;
    /**
    * A set of members who should be present in this group. Supported object types are Users, Groups or Service Principals
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/azuread/3.3.0/docs/resources/group#members Group#members}
    */
    readonly members?: string[];
    /**
    * Indicates the target on-premise group type the group will be written back as
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/azuread/3.3.0/docs/resources/group#onpremises_group_type Group#onpremises_group_type}
    */
    readonly onpremisesGroupType?: string;
    /**
    * A set of owners who own this group. Supported object types are Users or Service Principals
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/azuread/3.3.0/docs/resources/group#owners Group#owners}
    */
    readonly owners?: string[];
    /**
    * If `true`, will return an error if an existing group is found with the same name
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/azuread/3.3.0/docs/resources/group#prevent_duplicate_names Group#prevent_duplicate_names}
    */
    readonly preventDuplicateNames?: boolean | cdktf.IResolvable;
    /**
    * The group provisioning options for a Microsoft 365 group
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/azuread/3.3.0/docs/resources/group#provisioning_options Group#provisioning_options}
    */
    readonly provisioningOptions?: string[];
    /**
    * Whether the group is a security group for controlling access to in-app resources. At least one of `security_enabled` or `mail_enabled` must be specified. A group can be security enabled _and_ mail enabled
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/azuread/3.3.0/docs/resources/group#security_enabled Group#security_enabled}
    */
    readonly securityEnabled?: boolean | cdktf.IResolvable;
    /**
    * The colour theme for a Microsoft 365 group
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/azuread/3.3.0/docs/resources/group#theme Group#theme}
    */
    readonly theme?: string;
    /**
    * A set of group types to configure for the group. `Unified` specifies a Microsoft 365 group. Required when `mail_enabled` is true
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/azuread/3.3.0/docs/resources/group#types Group#types}
    */
    readonly types?: string[];
    /**
    * Specifies the group join policy and group content visibility
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/azuread/3.3.0/docs/resources/group#visibility Group#visibility}
    */
    readonly visibility?: string;
    /**
    * Whether this group should be synced from Azure AD to the on-premises directory when Azure AD Connect is used
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/azuread/3.3.0/docs/resources/group#writeback_enabled Group#writeback_enabled}
    */
    readonly writebackEnabled?: boolean | cdktf.IResolvable;
    /**
    * dynamic_membership block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/azuread/3.3.0/docs/resources/group#dynamic_membership Group#dynamic_membership}
    */
    readonly dynamicMembership?: GroupDynamicMembership;
    /**
    * timeouts block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/azuread/3.3.0/docs/resources/group#timeouts Group#timeouts}
    */
    readonly timeouts?: GroupTimeouts;
}
export interface GroupDynamicMembership {
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/azuread/3.3.0/docs/resources/group#enabled Group#enabled}
    */
    readonly enabled: boolean | cdktf.IResolvable;
    /**
    * Rule to determine members for a dynamic group. Required when `group_types` contains 'DynamicMembership'
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/azuread/3.3.0/docs/resources/group#rule Group#rule}
    */
    readonly rule: string;
}
export declare function groupDynamicMembershipToTerraform(struct?: GroupDynamicMembershipOutputReference | GroupDynamicMembership): any;
export declare function groupDynamicMembershipToHclTerraform(struct?: GroupDynamicMembershipOutputReference | GroupDynamicMembership): any;
export declare class GroupDynamicMembershipOutputReference extends cdktf.ComplexObject {
    private isEmptyObject;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string);
    get internalValue(): GroupDynamicMembership | undefined;
    set internalValue(value: GroupDynamicMembership | undefined);
    private _enabled?;
    get enabled(): boolean | cdktf.IResolvable;
    set enabled(value: boolean | cdktf.IResolvable);
    get enabledInput(): boolean | cdktf.IResolvable | undefined;
    private _rule?;
    get rule(): string;
    set rule(value: string);
    get ruleInput(): string | undefined;
}
export interface GroupTimeouts {
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/azuread/3.3.0/docs/resources/group#create Group#create}
    */
    readonly create?: string;
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/azuread/3.3.0/docs/resources/group#delete Group#delete}
    */
    readonly delete?: string;
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/azuread/3.3.0/docs/resources/group#read Group#read}
    */
    readonly read?: string;
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/azuread/3.3.0/docs/resources/group#update Group#update}
    */
    readonly update?: string;
}
export declare function groupTimeoutsToTerraform(struct?: GroupTimeouts | cdktf.IResolvable): any;
export declare function groupTimeoutsToHclTerraform(struct?: GroupTimeouts | cdktf.IResolvable): any;
export declare class GroupTimeoutsOutputReference extends cdktf.ComplexObject {
    private isEmptyObject;
    private resolvableValue?;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string);
    get internalValue(): GroupTimeouts | cdktf.IResolvable | undefined;
    set internalValue(value: GroupTimeouts | cdktf.IResolvable | undefined);
    private _create?;
    get create(): string;
    set create(value: string);
    resetCreate(): void;
    get createInput(): string | undefined;
    private _delete?;
    get delete(): string;
    set delete(value: string);
    resetDelete(): void;
    get deleteInput(): string | undefined;
    private _read?;
    get read(): string;
    set read(value: string);
    resetRead(): void;
    get readInput(): string | undefined;
    private _update?;
    get update(): string;
    set update(value: string);
    resetUpdate(): void;
    get updateInput(): string | undefined;
}
/**
* Represents a {@link https://registry.terraform.io/providers/hashicorp/azuread/3.3.0/docs/resources/group azuread_group}
*/
export declare class Group extends cdktf.TerraformResource {
    static readonly tfResourceType = "azuread_group";
    /**
    * Generates CDKTF code for importing a Group resource upon running "cdktf plan <stack-name>"
    * @param scope The scope in which to define this construct
    * @param importToId The construct id used in the generated config for the Group to import
    * @param importFromId The id of the existing Group that should be imported. Refer to the {@link https://registry.terraform.io/providers/hashicorp/azuread/3.3.0/docs/resources/group#import import section} in the documentation of this resource for the id to use
    * @param provider? Optional instance of the provider where the Group to import is found
    */
    static generateConfigForImport(scope: Construct, importToId: string, importFromId: string, provider?: cdktf.TerraformProvider): cdktf.ImportableResource;
    /**
    * Create a new {@link https://registry.terraform.io/providers/hashicorp/azuread/3.3.0/docs/resources/group azuread_group} Resource
    *
    * @param scope The scope in which to define this construct
    * @param id The scoped construct ID. Must be unique amongst siblings in the same scope
    * @param options GroupConfig
    */
    constructor(scope: Construct, id: string, config: GroupConfig);
    private _administrativeUnitIds?;
    get administrativeUnitIds(): string[];
    set administrativeUnitIds(value: string[]);
    resetAdministrativeUnitIds(): void;
    get administrativeUnitIdsInput(): string[] | undefined;
    private _assignableToRole?;
    get assignableToRole(): boolean | cdktf.IResolvable;
    set assignableToRole(value: boolean | cdktf.IResolvable);
    resetAssignableToRole(): void;
    get assignableToRoleInput(): boolean | cdktf.IResolvable | undefined;
    private _autoSubscribeNewMembers?;
    get autoSubscribeNewMembers(): boolean | cdktf.IResolvable;
    set autoSubscribeNewMembers(value: boolean | cdktf.IResolvable);
    resetAutoSubscribeNewMembers(): void;
    get autoSubscribeNewMembersInput(): boolean | cdktf.IResolvable | undefined;
    private _behaviors?;
    get behaviors(): string[];
    set behaviors(value: string[]);
    resetBehaviors(): void;
    get behaviorsInput(): string[] | undefined;
    private _description?;
    get description(): string;
    set description(value: string);
    resetDescription(): void;
    get descriptionInput(): string | undefined;
    private _displayName?;
    get displayName(): string;
    set displayName(value: string);
    get displayNameInput(): string | undefined;
    private _externalSendersAllowed?;
    get externalSendersAllowed(): boolean | cdktf.IResolvable;
    set externalSendersAllowed(value: boolean | cdktf.IResolvable);
    resetExternalSendersAllowed(): void;
    get externalSendersAllowedInput(): boolean | cdktf.IResolvable | undefined;
    private _hideFromAddressLists?;
    get hideFromAddressLists(): boolean | cdktf.IResolvable;
    set hideFromAddressLists(value: boolean | cdktf.IResolvable);
    resetHideFromAddressLists(): void;
    get hideFromAddressListsInput(): boolean | cdktf.IResolvable | undefined;
    private _hideFromOutlookClients?;
    get hideFromOutlookClients(): boolean | cdktf.IResolvable;
    set hideFromOutlookClients(value: boolean | cdktf.IResolvable);
    resetHideFromOutlookClients(): void;
    get hideFromOutlookClientsInput(): boolean | cdktf.IResolvable | undefined;
    private _id?;
    get id(): string;
    set id(value: string);
    resetId(): void;
    get idInput(): string | undefined;
    get mail(): string;
    private _mailEnabled?;
    get mailEnabled(): boolean | cdktf.IResolvable;
    set mailEnabled(value: boolean | cdktf.IResolvable);
    resetMailEnabled(): void;
    get mailEnabledInput(): boolean | cdktf.IResolvable | undefined;
    private _mailNickname?;
    get mailNickname(): string;
    set mailNickname(value: string);
    resetMailNickname(): void;
    get mailNicknameInput(): string | undefined;
    private _members?;
    get members(): string[];
    set members(value: string[]);
    resetMembers(): void;
    get membersInput(): string[] | undefined;
    get objectId(): string;
    get onpremisesDomainName(): string;
    private _onpremisesGroupType?;
    get onpremisesGroupType(): string;
    set onpremisesGroupType(value: string);
    resetOnpremisesGroupType(): void;
    get onpremisesGroupTypeInput(): string | undefined;
    get onpremisesNetbiosName(): string;
    get onpremisesSamAccountName(): string;
    get onpremisesSecurityIdentifier(): string;
    get onpremisesSyncEnabled(): cdktf.IResolvable;
    private _owners?;
    get owners(): string[];
    set owners(value: string[]);
    resetOwners(): void;
    get ownersInput(): string[] | undefined;
    get preferredLanguage(): string;
    private _preventDuplicateNames?;
    get preventDuplicateNames(): boolean | cdktf.IResolvable;
    set preventDuplicateNames(value: boolean | cdktf.IResolvable);
    resetPreventDuplicateNames(): void;
    get preventDuplicateNamesInput(): boolean | cdktf.IResolvable | undefined;
    private _provisioningOptions?;
    get provisioningOptions(): string[];
    set provisioningOptions(value: string[]);
    resetProvisioningOptions(): void;
    get provisioningOptionsInput(): string[] | undefined;
    get proxyAddresses(): string[];
    private _securityEnabled?;
    get securityEnabled(): boolean | cdktf.IResolvable;
    set securityEnabled(value: boolean | cdktf.IResolvable);
    resetSecurityEnabled(): void;
    get securityEnabledInput(): boolean | cdktf.IResolvable | undefined;
    private _theme?;
    get theme(): string;
    set theme(value: string);
    resetTheme(): void;
    get themeInput(): string | undefined;
    private _types?;
    get types(): string[];
    set types(value: string[]);
    resetTypes(): void;
    get typesInput(): string[] | undefined;
    private _visibility?;
    get visibility(): string;
    set visibility(value: string);
    resetVisibility(): void;
    get visibilityInput(): string | undefined;
    private _writebackEnabled?;
    get writebackEnabled(): boolean | cdktf.IResolvable;
    set writebackEnabled(value: boolean | cdktf.IResolvable);
    resetWritebackEnabled(): void;
    get writebackEnabledInput(): boolean | cdktf.IResolvable | undefined;
    private _dynamicMembership;
    get dynamicMembership(): GroupDynamicMembershipOutputReference;
    putDynamicMembership(value: GroupDynamicMembership): void;
    resetDynamicMembership(): void;
    get dynamicMembershipInput(): GroupDynamicMembership | undefined;
    private _timeouts;
    get timeouts(): GroupTimeoutsOutputReference;
    putTimeouts(value: GroupTimeouts): void;
    resetTimeouts(): void;
    get timeoutsInput(): cdktf.IResolvable | GroupTimeouts | undefined;
    protected synthesizeAttributes(): {
        [name: string]: any;
    };
    protected synthesizeHclAttributes(): {
        [name: string]: any;
    };
}
