import type { UserApplicationAccessDto } from './adminApi';
export interface GroupListDto {
    id: string;
    name: string;
    description: string | null;
    isActive: boolean;
    isSecurityGroup: boolean;
    isMailEnabled: boolean;
    entraObjectId: string | null;
    lastEntraSyncAt: string | null;
    isSyncedFromEntra: boolean;
    memberCount: number;
    roles: string[];
    createdAt: string;
    parentGroupId: string | null;
    parentGroupName: string | null;
    childCount: number;
}
export interface GroupDetailDto {
    id: string;
    name: string;
    description: string | null;
    isActive: boolean;
    isSecurityGroup: boolean;
    isMailEnabled: boolean;
    mail: string | null;
    mailNickname: string | null;
    entraObjectId: string | null;
    lastEntraSyncAt: string | null;
    isSyncedFromEntra: boolean;
    parentGroupId: string | null;
    parentGroupName: string | null;
    members: GroupMemberDto[];
    roles: GroupRoleDto[];
    childGroups: GroupChildDto[];
    createdAt: string;
    updatedAt: string | null;
    createdBy: string | null;
    updatedBy: string | null;
}
export interface GroupMemberDto {
    userId: string;
    email: string;
    fullName: string;
    addedAt: string;
    addedBy: string | null;
}
export interface GroupRoleDto {
    roleId: string;
    roleName: string;
    roleDescription: string | null;
    assignedAt: string;
    assignedBy: string;
    isInheritable: boolean;
    tenantId: string | null;
    tenantName: string | null;
    isGlobal: boolean;
}
export interface GroupChildDto {
    id: string;
    name: string;
    isActive: boolean;
}
export interface CreateGroupRequest {
    name: string;
    description?: string;
    isSecurityGroup?: boolean;
    parentGroupId?: string;
}
export interface UpdateGroupRequest {
    name: string;
    description?: string;
}
export interface LinkEntraRequest {
    entraObjectId: string;
}
export interface AddMemberRequest {
    userId: string;
}
export interface AssignRoleRequest {
    roleId: string;
    isInheritable?: boolean;
    tenantId?: string | null;
}
export interface SetInheritableRequest {
    isInheritable: boolean;
}
export interface SetParentGroupRequest {
    parentGroupId: string | null;
}
export interface InheritedTenantDto {
    tenantId: string;
    tenantName: string;
    tenantSlug: string;
    tenantType: string;
    inheritedFromGroupId: string;
    inheritedFromGroupName: string;
}
export interface InheritedMemberDto {
    userId: string;
    email: string;
    fullName: string;
    inheritedFromGroupId: string;
    inheritedFromGroupName: string;
    level: number;
}
export interface InheritedGroupRoleDto {
    roleId: string;
    roleName: string;
    roleDescription: string | null;
    tenantId: string | null;
    tenantName: string | null;
    isGlobal: boolean;
    inheritedFromGroupId: string;
    inheritedFromGroupName: string;
    level: number;
}
export interface GroupTenantDto {
    tenantId: string;
    tenantName: string;
    tenantSlug: string;
    tenantType: string;
    addedAt: string;
    addedBy: string | null;
}
export interface AddToTenantRequest {
    tenantId: string;
}
export interface CustomRoleDetailDto {
    id: string;
    name: string;
    shortName: string;
    category: string;
    description: string | null;
    isSystem: boolean;
    permissions: CustomRolePermissionDto[];
    createdAt: string;
    updatedAt: string | null;
}
export interface CustomRolePermissionDto {
    id: string;
    path: string;
    description: string | null;
}
/**
 * Factory function to create groups API with explicit tenant context.
 * @param tenantSlug - Optional tenant slug to use for all requests
 */
declare const _createGroupsApi: (tenantSlug?: string) => {
    getAll: (search?: string, isActive?: boolean, syncedFromEntra?: boolean) => Promise<GroupListDto[]>;
    getById: (id: string) => Promise<GroupDetailDto>;
    create: (data: CreateGroupRequest) => Promise<GroupDetailDto>;
    update: (id: string, data: UpdateGroupRequest) => Promise<GroupDetailDto>;
    delete: (id: string) => Promise<void>;
    activate: (id: string) => Promise<void>;
    deactivate: (id: string) => Promise<void>;
    linkToEntra: (id: string, data: LinkEntraRequest) => Promise<void>;
    unlinkFromEntra: (id: string) => Promise<void>;
    getMembers: (id: string) => Promise<GroupMemberDto[]>;
    addMember: (id: string, data: AddMemberRequest) => Promise<void>;
    removeMember: (groupId: string, userId: string) => Promise<void>;
    getRoles: (id: string) => Promise<GroupRoleDto[]>;
    assignRole: (id: string, data: AssignRoleRequest) => Promise<void>;
    removeRole: (groupId: string, roleId: string, tenantId?: string | null) => Promise<void>;
    setRoleInheritable: (groupId: string, roleId: string, data: SetInheritableRequest) => Promise<void>;
    getChildGroups: (id: string) => Promise<GroupChildDto[]>;
    setParentGroup: (id: string, data: SetParentGroupRequest) => Promise<void>;
    getTenants: (id: string) => Promise<GroupTenantDto[]>;
    getInheritedTenants: (id: string) => Promise<InheritedTenantDto[]>;
    getInheritedMembers: (id: string) => Promise<InheritedMemberDto[]>;
    getInheritedRoles: (id: string) => Promise<InheritedGroupRoleDto[]>;
    addToTenant: (id: string, data: AddToTenantRequest) => Promise<void>;
    removeFromTenant: (groupId: string, tenantId: string) => Promise<void>;
    getApplicationAccess: (id: string, tenantId?: string) => Promise<UserApplicationAccessDto[]>;
    getCustomRole: (id: string) => Promise<CustomRoleDetailDto | null>;
    createCustomRole: (id: string) => Promise<CustomRoleDetailDto>;
    deleteCustomRole: (id: string) => Promise<void>;
};
export type GroupsApi = ReturnType<typeof _createGroupsApi>;
export declare const createGroupsApi: (tenantSlug?: string) => GroupsApi;
export declare const groupsApi: {
    getAll: (search?: string, isActive?: boolean, syncedFromEntra?: boolean) => Promise<GroupListDto[]>;
    getById: (id: string) => Promise<GroupDetailDto>;
    create: (data: CreateGroupRequest) => Promise<GroupDetailDto>;
    update: (id: string, data: UpdateGroupRequest) => Promise<GroupDetailDto>;
    delete: (id: string) => Promise<void>;
    activate: (id: string) => Promise<void>;
    deactivate: (id: string) => Promise<void>;
    linkToEntra: (id: string, data: LinkEntraRequest) => Promise<void>;
    unlinkFromEntra: (id: string) => Promise<void>;
    getMembers: (id: string) => Promise<GroupMemberDto[]>;
    addMember: (id: string, data: AddMemberRequest) => Promise<void>;
    removeMember: (groupId: string, userId: string) => Promise<void>;
    getRoles: (id: string) => Promise<GroupRoleDto[]>;
    assignRole: (id: string, data: AssignRoleRequest) => Promise<void>;
    removeRole: (groupId: string, roleId: string, tenantId?: string | null) => Promise<void>;
    setRoleInheritable: (groupId: string, roleId: string, data: SetInheritableRequest) => Promise<void>;
    getChildGroups: (id: string) => Promise<GroupChildDto[]>;
    setParentGroup: (id: string, data: SetParentGroupRequest) => Promise<void>;
    getTenants: (id: string) => Promise<GroupTenantDto[]>;
    getInheritedTenants: (id: string) => Promise<InheritedTenantDto[]>;
    getInheritedMembers: (id: string) => Promise<InheritedMemberDto[]>;
    getInheritedRoles: (id: string) => Promise<InheritedGroupRoleDto[]>;
    addToTenant: (id: string, data: AddToTenantRequest) => Promise<void>;
    removeFromTenant: (groupId: string, tenantId: string) => Promise<void>;
    getApplicationAccess: (id: string, tenantId?: string) => Promise<UserApplicationAccessDto[]>;
    getCustomRole: (id: string) => Promise<CustomRoleDetailDto | null>;
    createCustomRole: (id: string) => Promise<CustomRoleDetailDto>;
    deleteCustomRole: (id: string) => Promise<void>;
};
export {};
//# sourceMappingURL=groupsApi.d.ts.map