import { CrowdinApi, Pagination, PaginationOptions, PatchRequest, ProjectRole, ProjectRoles, ResponseList, ResponseObject } from '../core';
import { ProjectsGroupsModel } from '../projectsGroups';
import { TeamsModel } from '../teams';
/**
 * Users API gives you the possibility to get profile information about the currently authenticated user.
 *
 * In Crowdin Enterprise users are the members of your organization with the defined access levels.
 * Use API to get the list of organization users and to check the information on a specific user.
 */
export declare class Users extends CrowdinApi {
    /**
     * @param groupId group identifier
     * @param options optional parameters for the request
     * @see https://support.crowdin.com/developer/enterprise/api/v2/#tag/Users/operation/api.groups.managers.getMany
     */
    listGroupManagers(groupId: number, options?: UsersModel.ListGroupManagersOptions): Promise<ResponseList<UsersModel.GroupManager>>;
    /**
     * @param groupId group identifier
     * @param request request body
     * @see https://support.crowdin.com/developer/enterprise/api/v2/#tag/Users/operation/api.groups.managers.patch
     */
    updateGroupManagers(groupId: number, request: PatchRequest[]): Promise<ResponseList<UsersModel.GroupManager>>;
    /**
     * @param groupId group identifier
     * @param userId user identifier
     * @see https://support.crowdin.com/developer/enterprise/api/v2/#tag/Users/operation/api.groups.managers.get
     */
    getGroupManager(groupId: number, userId: number): Promise<ResponseObject<UsersModel.GroupManager>>;
    /**
     * @param projectId project identifier
     * @param options optional parameters for the request
     * @see https://developer.crowdin.com/api/v2/#operation/api.projects.members.getMany
     */
    listProjectMembers(projectId: number, options?: UsersModel.ListProjectMembersOptions): Promise<ResponseList<UsersModel.ProjectMember | UsersModel.EnterpriseProjectMember>>;
    /**
     * @param projectId project identifier
     * @param search search users by firstName, lastName or username
     * @param role defines role type
     * @param languageId language identifier
     * @param limit maximum number of items to retrieve (default 25)
     * @param offset starting offset in the collection (default 0)
     * @deprecated optional parameters should be passed through an object
     * @see https://developer.crowdin.com/api/v2/#operation/api.projects.members.getMany
     */
    listProjectMembers(projectId: number, search?: string, role?: UsersModel.Role, languageId?: string, limit?: number, offset?: number): Promise<ResponseList<UsersModel.ProjectMember | UsersModel.EnterpriseProjectMember>>;
    /**
     * @param projectId project identifier
     * @param request request body
     * @see https://support.crowdin.com/enterprise/api/#operation/api.projects.members.post
     */
    addProjectMember(projectId: number, request: UsersModel.AddProjectMemberRequest): Promise<UsersModel.AddProjectMemberResponse>;
    /**
     * @param projectId project identifier
     * @param memberId member identifier
     * @see https://developer.crowdin.com/api/v2/#operation/api.projects.members.get
     */
    getProjectMemberPermissions(projectId: number, memberId: number): Promise<ResponseObject<UsersModel.ProjectMember | UsersModel.EnterpriseProjectMember>>;
    /**
     * @param projectId project identifier
     * @param memberId member identifier
     * @see https://support.crowdin.com/enterprise/api/#operation/api.projects.members.put
     */
    replaceProjectMemberPermissions(projectId: number, memberId: number, request?: UsersModel.ReplaceProjectMemberRequest): Promise<ResponseObject<UsersModel.ProjectMember | UsersModel.EnterpriseProjectMember>>;
    /**
     * @param projectId project identifier
     * @param memberId member identifier
     * @see https://support.crowdin.com/enterprise/api/#operation/api.projects.members.delete
     */
    deleteMemberFromProject(projectId: number, memberId: number): Promise<void>;
    /**
     * @param options optional parameters for the request
     * @see https://support.crowdin.com/enterprise/api/#operation/api.users.getMany
     */
    listUsers(options?: UsersModel.ListUsersOptions): Promise<ResponseList<UsersModel.User>>;
    /**
     * @param status filter users by status
     * @param search search users by firstName, lastName, username, email
     * @param twoFactor filter users by two-factor authentication status
     * @param limit maximum number of items to retrieve (default 25)
     * @param offset starting offset in the collection (default 0)
     * @deprecated optional parameters should be passed through an object
     * @see https://support.crowdin.com/enterprise/api/#operation/api.users.getMany
     */
    listUsers(status?: UsersModel.Status, search?: string, twoFactor?: UsersModel.TwoFactor, limit?: number, offset?: number): Promise<ResponseList<UsersModel.User>>;
    /**
     * @param request request body
     * @see https://support.crowdin.com/enterprise/api/#operation/api.users.post
     */
    inviteUser(request: UsersModel.InviteUserRequest): Promise<ResponseObject<UsersModel.User>>;
    /**
     * @param userId user identifier
     * @see https://support.crowdin.com/enterprise/api/#operation/api.users.getById
     */
    getUserInfo(userId: number): Promise<ResponseObject<UsersModel.User>>;
    /**
     * @param userId user identifier
     * @see https://support.crowdin.com/enterprise/api/#operation/api.users.delete
     */
    deleteUser(userId: number): Promise<void>;
    /**
     * @param userId user identifier
     * @param request request body
     * @see https://support.crowdin.com/enterprise/api/#operation/api.users.patch
     */
    editUser(userId: number, request: PatchRequest[]): Promise<ResponseObject<UsersModel.User>>;
    /**
     * @see https://developer.crowdin.com/api/v2/#operation/api.user.get
     */
    getAuthenticatedUser(): Promise<ResponseObject<UsersModel.User>>;
    /**
     * @param request request body
     * @see https://developer.crowdin.com/api/v2/#operation/api.user.patch
     */
    editAuthenticatedUser(request: PatchRequest[]): Promise<ResponseObject<UsersModel.User>>;
    /**
     * @param userId user identifier
     * @param options request options
     * @see https://developer.crowdin.com/enterprise/api/v2/#operation/api.users.projects.permissions.getMany
     */
    listUserProjectPermissions(userId: number, options?: PaginationOptions): Promise<ResponseList<UsersModel.ProjectPermissions>>;
    /**
     * @param userId user identifier
     * @param request request body
     * @see https://developer.crowdin.com/enterprise/api/v2/#operation/api.users.projects.permissions.patch
     */
    editUserProjectPermissions(userId: number, request: PatchRequest[]): Promise<ResponseList<UsersModel.ProjectPermissions>>;
    /**
     * @param userId user identifier
     * @param options request options
     * @see https://developer.crowdin.com/enterprise/api/v2/#operation/api.users.projects.contributions.getMany
     */
    listUserProjectContributions(userId: number, options?: PaginationOptions): Promise<ResponseList<UsersModel.ProjectPermissions>>;
}
export declare namespace UsersModel {
    interface ListGroupManagersOptions extends PaginationOptions {
        teamIds?: number[];
        orderBy?: string;
    }
    interface ListProjectMembersOptions extends PaginationOptions {
        search?: string;
        role?: Role;
        languageId?: string;
        workflowStepId?: number;
        orderBy?: string;
    }
    interface ListUsersOptions extends PaginationOptions {
        status?: Status;
        search?: string;
        twoFactor?: TwoFactor;
        orderBy?: string;
        organizationRoles?: OrganizationRoles[];
        teamId?: number;
        projectIds?: string;
        projectRoles?: ProjectRoles[];
        languageIds?: string;
        groupIds?: string;
        lastSeenFrom?: string;
        lastSeenTo?: string;
    }
    interface InviteUserRequest {
        email: string;
        firstName?: string;
        lastName?: string;
        timezone?: string;
        adminAccess?: boolean;
    }
    interface User {
        id: number;
        username: string;
        email: string;
        firstName: string;
        lastName: string;
        status: Status;
        avatarUrl: string;
        fields: Record<string, any>;
        createdAt: string;
        lastSeen: string;
        twoFactor: TwoFactor;
        isAdmin: boolean;
        timezone: string;
        emailVerified: string;
    }
    type Status = 'active' | 'pending' | 'blocked';
    type TwoFactor = 'enabled' | 'disabled';
    type OrganizationRoles = 'admin' | 'manager' | 'vendor' | 'client';
    interface GroupManager {
        id: number;
        user: User;
        teams: TeamsModel.Team[];
    }
    interface ProjectMember {
        id: number;
        username: string;
        fullName: string;
        role: Role;
        /**
         * @deprecated
         */
        permissions: Permissions;
        avatarUrl: string;
        joinedAt: string;
        timezone: string;
        roles: ProjectRole[];
    }
    interface EnterpriseProjectMember {
        id: number;
        username: string;
        firstName: string;
        lastName: string;
        isManager: boolean;
        isDeveloperr: boolean;
        managerOfGroup: Group;
        /**
         * @deprecated
         */
        accessToAllWorkflowSteps: boolean;
        /**
         * @deprecated
         */
        permissions: Permissions;
        givenAccessAt: string;
        roles: ProjectRole[];
    }
    interface Group {
        id: number;
        name: string;
    }
    type Role = 'all' | 'owner' | 'manager' | 'proofreader' | 'translator' | 'blocked';
    type LanguageRole = 'proofreader' | 'translator' | 'denied';
    interface AddProjectMemberRequest {
        userIds?: number[];
        usernames?: string[];
        emails?: string[];
        managerAccess?: boolean;
        roles?: ProjectRole[];
        developerAccess?: boolean;
        /**
         * @deprecated
         */
        accessToAllWorkflowSteps?: boolean;
        /**
         * @deprecated
         */
        permissions?: Permissions;
    }
    interface AddProjectMemberResponse {
        skipped: ResponseObject<ProjectMember | EnterpriseProjectMember>[];
        added: ResponseObject<ProjectMember | EnterpriseProjectMember>[];
        pagination: Pagination;
    }
    interface ReplaceProjectMemberRequest {
        managerAccess?: boolean;
        developerAccess?: boolean;
        roles?: ProjectRole[];
        /**
         * @deprecated
         */
        accessToAllWorkflowSteps?: boolean;
        /**
         * @deprecated
         */
        permissions?: Permissions;
    }
    interface ProjectPermissions {
        id: number;
        roles: ProjectRole[];
        project: ProjectsGroupsModel.Project | ProjectsGroupsModel.ProjectSettings;
        teams: TeamsModel.Team[];
    }
    interface Contributions {
        id: number;
        translated: Contribution;
        approved: Contribution;
        voted: Contribution;
        commented: Contribution;
        project: ProjectsGroupsModel.Project | ProjectsGroupsModel.ProjectSettings;
    }
    interface Contribution {
        strings: number;
        words?: number;
    }
    interface Permissions {
        [lang: string]: string | {
            workflowStepIds: number[] | 'all';
        };
    }
}
