import { CrowdinApi, Pagination, PaginationOptions, PatchRequest, ProjectRole, ResponseList, ResponseObject } from '../core';
import { ProjectsGroupsModel } from '../projectsGroups';
export declare class Teams extends CrowdinApi {
    /**
     * @param teamId team identifier
     * @param options request options
     * @see https://developer.crowdin.com/enterprise/api/v2/#operation/api.teams.projects.permissions.getMany
     */
    listTeamProjectPermissions(teamId: number, options?: PaginationOptions): Promise<ResponseList<TeamsModel.ProjectPermissions>>;
    /**
     * @param teamId team identifier
     * @param request request body
     * @see https://developer.crowdin.com/enterprise/api/v2/#operation/api.teams.projects.permissions.patch
     */
    editTeamProjectPermissions(teamId: number, request: PatchRequest[]): Promise<ResponseList<TeamsModel.ProjectPermissions>>;
    /**
     * @param projectId project identifier
     * @param request request body
     * @see https://support.crowdin.com/enterprise/api/#operation/api.projects.teams.post
     */
    addTeamToProject(projectId: number, request: TeamsModel.AddTeamToProjectRequest): Promise<TeamsModel.ProjectTeamResources>;
    /**
     * @param options optional pagination parameters for the request
     * @see https://support.crowdin.com/enterprise/api/#operation/api.teams.getMany
     */
    listTeams(options?: PaginationOptions): Promise<ResponseList<TeamsModel.Team>>;
    /**
     * @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.teams.getMany
     */
    listTeams(limit?: number, offset?: number): Promise<ResponseList<TeamsModel.Team>>;
    /**
     * @param request request body
     * @see https://support.crowdin.com/enterprise/api/#operation/api.teams.post
     */
    addTeam(request: TeamsModel.AddTeamRequest): Promise<ResponseObject<TeamsModel.Team>>;
    /**
     * @param teamId team identifier
     * @see https://support.crowdin.com/enterprise/api/#operation/api.teams.get
     */
    getTeam(teamId: number): Promise<ResponseObject<TeamsModel.Team>>;
    /**
     * @param teamId team identifier
     * @see https://support.crowdin.com/enterprise/api/#operation/api.teams.delete
     */
    deleteTeam(teamId: number): Promise<void>;
    /**
     * @param teamId team identifier
     * @param request request body
     * @see https://support.crowdin.com/enterprise/api/#operation/api.teams.patch
     */
    editTeam(teamId: number, request: PatchRequest[]): Promise<ResponseObject<TeamsModel.Team>>;
    /**
     * @param teamId team identifier
     * @param options optional pagination parameters for the request
     * @see https://support.crowdin.com/enterprise/api/#operation/api.teams.members.getMany
     */
    teamMembersList(teamId: number, options?: PaginationOptions): Promise<ResponseList<TeamsModel.TeamMember>>;
    /**
     * @param teamId team 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://support.crowdin.com/enterprise/api/#operation/api.teams.members.getMany
     */
    teamMembersList(teamId: number, limit?: number, offset?: number): Promise<ResponseList<TeamsModel.TeamMember>>;
    /**
     * @param teamId team identifier
     * @param request request body
     * @see https://support.crowdin.com/enterprise/api/#operation/api.teams.members.post
     */
    addTeamMembers(teamId: number, request: TeamsModel.AddTeamMembersRequest): Promise<TeamsModel.AddTeamMembersResponse>;
    /**
     * @param teamId team identifier
     * @see https://support.crowdin.com/enterprise/api/#operation/api.teams.members.deleteMany
     */
    deleteAllTeamMembers(teamId: number): Promise<void>;
    /**
     * @param teamId team identifier
     * @param memberId member identifier
     * @see https://support.crowdin.com/enterprise/api/#operation/api.teams.members.delete
     */
    deleteTeamMember(teamId: number, memberId: number): Promise<void>;
}
export declare namespace TeamsModel {
    interface ProjectPermissions {
        id: number;
        roles: ProjectRole[];
        project: ProjectsGroupsModel.Project | ProjectsGroupsModel.ProjectSettings;
    }
    interface AddTeamToProjectRequest {
        teamId: number;
        managerAccess?: boolean;
        developerAccess?: boolean;
        roles?: ProjectRole[];
        /**
         * @deprecated
         */
        accessToAllWorkflowSteps?: boolean;
        /**
         * @deprecated
         */
        permissions?: Permissions;
    }
    interface ProjectTeamResources {
        skipped: ProjectTeamResource;
        added: ProjectTeamResource;
    }
    interface ProjectTeamResource {
        id: number;
        hasManagerAccess: boolean;
        hasDeveloperAccess: boolean;
        /**
         * @deprecated
         */
        hasAccessToAllWorkflowSteps: boolean;
        /**
         * @deprecated
         */
        permissions: Permissions;
        roles: ProjectRole[];
    }
    interface Permissions {
        [lang: string]: {
            workflowStepIds: number[] | 'all';
        };
    }
    interface Team {
        id: number;
        name: string;
        totalMembers: number;
        webUrl: string;
        createdAt: string;
        updatedAt: string;
    }
    interface AddTeamRequest {
        name: string;
    }
    interface TeamMember {
        id: number;
        username: string;
        firstName: string;
        lastName: string;
        avatarUrl: string;
        addedAt: string;
    }
    interface AddTeamMembersRequest {
        userIds: number[];
    }
    interface AddTeamMembersResponse {
        skipped: ResponseObject<TeamMember>[];
        added: ResponseObject<TeamMember>[];
        pagination: Pagination;
    }
}
