import { BooleanInt, CrowdinApi, DownloadLink, PaginationOptions, PatchRequest, ResponseList, ResponseObject } from '../core';
import { LanguagesModel } from '../languages';
/**
 * Create and assign tasks to get files translated or proofread by specific people.
 * You can set the due dates, split words between people, and receive notifications about the changes and updates on tasks.
 * Tasks are project-specific, so you’ll have to create them within a project.
 *
 * Use API to create, modify, and delete specific tasks.
 */
export declare class Tasks extends CrowdinApi {
    /**
     * @param projectId project identifier
     * @param options optional parameters for the request
     * @see https://developer.crowdin.com/api/v2/#operation/api.projects.tasks.getMany
     */
    listTasks(projectId: number, options?: TasksModel.ListTasksOptions): Promise<ResponseList<TasksModel.Task>>;
    /**
     * @param projectId project identifier
     * @param limit maximum number of items to retrieve (default 25)
     * @param offset starting offset in the collection (default 0)
     * @param status list tasks with specified statuses. It can be one status or a list of comma-separated status values
     * @deprecated optional parameters should be passed through an object
     * @see https://developer.crowdin.com/api/v2/#operation/api.projects.tasks.getMany
     */
    listTasks(projectId: number, limit?: number, offset?: number, status?: TasksModel.Status): Promise<ResponseList<TasksModel.Task>>;
    /**
     * @param projectId project identifier
     * @param request request body
     * @see https://developer.crowdin.com/api/v2/#operation/api.projects.tasks.post
     */
    addTask(projectId: number, request: TasksModel.CreateTaskRequest): Promise<ResponseObject<TasksModel.Task>>;
    /**
     * @param projectId project identifier
     * @param taskId task identifier
     * @see https://developer.crowdin.com/api/v2/#operation/api.projects.tasks.exports.post
     */
    exportTaskStrings(projectId: number, taskId: number): Promise<ResponseObject<DownloadLink>>;
    /**
     * @param projectId project identifier
     * @param taskId task identifier
     * @see https://developer.crowdin.com/api/v2/#operation/api.projects.tasks.get
     */
    getTask(projectId: number, taskId: number): Promise<ResponseObject<TasksModel.Task>>;
    /**
     * @param projectId project identifier
     * @param taskId task identifier
     * @see https://developer.crowdin.com/api/v2/#operation/api.projects.tasks.delete
     */
    deleteTask(projectId: number, taskId: number): Promise<void>;
    /**
     * @param projectId project identifier
     * @param taskId task identifier
     * @param request request body
     * @see https://developer.crowdin.com/api/v2/#operation/api.projects.tasks.patch
     */
    editTask(projectId: number, taskId: number, request: PatchRequest[]): Promise<ResponseObject<TasksModel.Task>>;
    /**
     * @param projectId project identifier
     * @param taskId task identifier
     * @param options optional parameters for the request
     * @see https://support.crowdin.com/developer/api/v2/#tag/Tasks/operation/api.projects.tasks.comments.getMany
     */
    listTasksComments(projectId: number, taskId: number, options?: PaginationOptions): Promise<ResponseList<TasksModel.TaskComment>>;
    /**
     * @param projectId project identifier
     * @param taskId task identifier
     * @param request request body
     * @see https://support.crowdin.com/developer/api/v2/#tag/Tasks/operation/api.projects.tasks.comments.post
     */
    addTaskComment(projectId: number, taskId: number, request: TasksModel.CreateTaskCommentRequest): Promise<ResponseObject<TasksModel.TaskComment>>;
    /**
     * @param projectId project identifier
     * @param taskId task identifier
     * @param commentId comment identifier
     * @see https://support.crowdin.com/developer/api/v2/#tag/Tasks/operation/api.projects.tasks.comments.get
     */
    getTaskComment(projectId: number, taskId: number, commentId: number): Promise<ResponseObject<TasksModel.TaskComment>>;
    /**
     * @param projectId project identifier
     * @param taskId task identifier
     * @param commentId comment identifier
     * @see https://support.crowdin.com/developer/api/v2/#tag/Tasks/operation/api.projects.tasks.comments.delete
     */
    deleteTaskComment(projectId: number, taskId: number, commentId: number): Promise<void>;
    /**
     * @param projectId project identifier
     * @param taskId task identifier
     * @param commentId comment identifier
     * @param request request body
     * @see https://support.crowdin.com/developer/api/v2/#tag/Tasks/operation/api.projects.tasks.comments.patch
     */
    editTaskComment(projectId: number, taskId: number, commentId: number, request: PatchRequest[]): Promise<ResponseObject<TasksModel.TaskComment>>;
    /**
     * @param options optional parameters for the request
     * @see https://developer.crowdin.com/api/v2/#operation/api.user.tasks.getMany
     */
    listUserTasks(options?: TasksModel.ListUserTasksOptions): Promise<ResponseList<TasksModel.UserTask>>;
    /**
     * @param limit maximum number of items to retrieve (default 25)
     * @param offset starting offset in the collection (default 0)
     * @param status list tasks with specified statuses. It can be one status or a list of comma-separated status values
     * @param isArchived list archived/not archived tasks for the authorized user. 1 - archived, 0 - not archived
     * @deprecated optional parameters should be passed through an object
     * @see https://developer.crowdin.com/api/v2/#operation/api.user.tasks.getMany
     */
    listUserTasks(limit?: number, offset?: number, status?: TasksModel.Status, isArchived?: BooleanInt): Promise<ResponseList<TasksModel.UserTask>>;
    /**
     * List tasks owned by a specific user
     * Returns tasks from all projects where the user with the specified ID is the owner/creator
     * @param userId user identifier
     * @param options optional parameters for the request
     * @see https://support.crowdin.com/developer/enterprise/api/v2/#tag/Tasks/operation/api.users.tasks.getMany
     */
    listTasksOwnedByUser(userId: number, options?: TasksModel.ListOrganizationTasksOptions): Promise<ResponseList<TasksModel.Task>>;
    /**
     * @param options optional parameters for the request
     * @see https://support.crowdin.com/developer/enterprise/api/v2/#tag/Tasks/operation/api.tasks.getMany
     */
    listOrganizationTasks(options?: TasksModel.ListOrganizationTasksOptions): Promise<ResponseList<TasksModel.Task>>;
    /**
     * @param projectId project identifier
     * @param taskId task identifier
     * @param request request body
     * @see https://developer.crowdin.com/api/v2/#operation/api.user.tasks.patch
     */
    editTaskArchivedStatus(projectId: number, taskId: number, request: PatchRequest[]): Promise<ResponseObject<TasksModel.UserTask>>;
    /**
     * @param projectId project identifier
     * @param options optional parameters for the request
     * @see https://developer.crowdin.com/api/v2/#operation/api.projects.tasks.settings-templates.getMany
     */
    listTaskSettingsTemplates(projectId: number, options?: PaginationOptions): Promise<ResponseList<TasksModel.TaskSettingsTemplate>>;
    /**
     * @param projectId project identifier
     * @param request request body
     * @see https://developer.crowdin.com/api/v2/#operation/api.projects.tasks.settings-templates.post
     */
    addTaskSettingsTemplate(projectId: number, request: TasksModel.AddTaskSettingsTemplate): Promise<ResponseObject<TasksModel.TaskSettingsTemplate>>;
    /**
     * @param projectId project identifier
     * @param taskSettingsId task settings identifier
     * @see https://developer.crowdin.com/api/v2/#operation/api.projects.tasks.settings-templates.get
     */
    getTaskSettingsTemplate(projectId: number, taskSettingsId: number): Promise<ResponseObject<TasksModel.TaskSettingsTemplate>>;
    /**
     * @param projectId project identifier
     * @param taskSettingsId task settings identifier
     * @see https://developer.crowdin.com/api/v2/#operation/api.projects.tasks.settings-templates.delete
     */
    deleteTaskSettingsTemplate(projectId: number, taskSettingsId: number): Promise<void>;
    /**
     * @param projectId project identifier
     * @param taskSettingsId task settings identifier
     * @param request request body
     * @see https://developer.crowdin.com/api/v2/#operation/api.projects.tasks.settings-templates.patch
     */
    editTaskSettingsTemplate(projectId: number, taskSettingsId: number, request: PatchRequest[]): Promise<ResponseObject<TasksModel.TaskSettingsTemplate>>;
}
export declare namespace TasksModel {
    interface Task {
        id: number;
        projectId: number;
        creatorId: number;
        type: Type | TypeVendor;
        status: Status;
        title: string;
        assignees: Assignee[];
        assignedTeams: AssignedTeam[];
        progress: Progress;
        translateProgress: Progress;
        sourceLanguageId: string;
        targetLanguageId: string;
        description: string;
        translationUrl: string;
        webUrl: string;
        wordsCount: number;
        commentsCount: number;
        deadline: string;
        startedAt: string;
        resolvedAt: string;
        timeRange: string;
        workflowStepId: number;
        buyUrl: string;
        createdAt: string;
        updatedAt: string;
        sourceLanguage: LanguagesModel.Language;
        targetLanguages: LanguagesModel.Language[];
        labelIds: number[];
        excludeLabelIds: number[];
        precedingTaskId: number;
        filesCount: number;
        fileIds: number[];
        branchIds: number[];
        vendor: string;
        fields: Record<string, any>;
    }
    interface ListUserTasksOptions extends PaginationOptions {
        status?: Status;
        isArchived?: BooleanInt;
        orderBy?: string;
    }
    interface ListOrganizationTasksOptions extends PaginationOptions {
        orderBy?: string;
        status?: string;
        type?: string;
        projectIds?: string;
        groupIds?: string;
        assigneeIds?: string;
        creatorIds?: string;
        targetLanguageIds?: string;
        sourceLanguageIds?: string;
        createdAtFrom?: string;
        createdAtTo?: string;
        deadlineFrom?: string;
        deadlineTo?: string;
    }
    interface UserTask extends Task {
        isArchived: boolean;
    }
    type CreateTaskRequest = CreateTaskEnterpriseByBranchIds | CreateTaskEnterpriseByFileIds | CreateTaskEnterpriseByStringIds | CreateTaskEnterpriseVendorByBranchIds | CreateTaskEnterpriseVendorByFileIds | CreateTaskEnterpriseVendorByStringIds | CreateTaskEnterprisePendingTask | CreateTaskByFileIds | CreateTaskByStringIds | CreateTaskByBranchIds | CreateTaskByFileIdsLanguageService | CreateTaskByStringIdsLanguageService | CreateTaskByBranchIdsLanguageService | CreateTaskVendorOhtByFileIds | CreateTaskVendorOhtByStringIds | CreateTaskVendorOhtByBranchIds | CreateTaskVendorGengoByFileIds | CreateTaskVendorGengoByStringIds | CreateTaskVendorGengoByBranchIds | CreateTaskVendorManualByFileIds | CreateTaskVendorManualByStringIds | CreateTaskVendorManualByBranchIds | CreateTaskPendingTask | CreateTaskPendingTaskLanguageService | CreateTaskPendingTaskVendorManual;
    interface CreateTaskEnterpriseByBranchIds {
        type: Type;
        workflowStepId: number;
        title: string;
        languageId: string;
        branchIds: number[];
        labelIds?: number[];
        excludeLabelIds?: number[];
        status?: RequestStatus;
        description?: string;
        splitContent?: boolean;
        skipAssignedStrings?: boolean;
        assignees?: CreateTaskAssignee[];
        assignedTeams?: AssignedTeam[];
        includePreTranslatedStringsOnly?: boolean;
        deadline?: string;
        startedAt?: string;
        dateFrom?: string;
        dateTo?: string;
        fields?: Record<string, any>;
    }
    interface CreateTaskEnterpriseByStringIds {
        type: Type;
        workflowStepId: number;
        title: string;
        languageId: string;
        stringIds: number[];
        status?: RequestStatus;
        description?: string;
        splitContent?: boolean;
        skipAssignedStrings?: boolean;
        assignees?: CreateTaskAssignee[];
        assignedTeams?: AssignedTeam[];
        includePreTranslatedStringsOnly?: boolean;
        deadline?: string;
        startedAt?: string;
        dateFrom?: string;
        dateTo?: string;
        fields?: Record<string, any>;
    }
    type CreateTaskEnterpriseVendorByStringIds = Omit<CreateTaskEnterpriseByStringIds, 'type' | 'status' | 'splitContent' | 'assignees' | 'assignedTeams'>;
    type CreateTaskEnterpriseVendorByBranchIds = Omit<CreateTaskEnterpriseByBranchIds, 'type' | 'status' | 'splitContent' | 'assignees' | 'assignedTeams'>;
    type CreateTaskEnterpriseByFileIds = Omit<CreateTaskEnterpriseByBranchIds, 'branchIds'> & {
        fileIds: number[];
    };
    type CreateTaskEnterpriseVendorByFileIds = Omit<CreateTaskEnterpriseByFileIds, 'type' | 'status' | 'splitContent' | 'assignees' | 'assignedTeams'>;
    interface CreateTaskEnterprisePendingTask {
        precedingTaskId: number;
        type: Type.PROOFREAD;
        title: string;
        description?: string;
        assignees?: CreateTaskAssignee[];
        assignedTeams?: AssignedTeam[];
        deadline?: string;
    }
    interface CreateTaskByFileIds {
        title: string;
        languageId: string;
        type: Type;
        fileIds: number[];
        labelIds?: number[];
        excludeLabelIds?: number[];
        status?: RequestStatus;
        description?: string;
        splitContent?: boolean;
        skipAssignedStrings?: boolean;
        includePreTranslatedStringsOnly?: boolean;
        assignees?: CreateTaskAssignee[];
        deadline?: string;
        startedAt?: string;
        dateFrom?: string;
        dateTo?: string;
    }
    type CreateTaskByStringIds = Omit<CreateTaskByFileIds, 'fileIds' | 'labelIds' | 'excludeLabelIds'> & {
        stringIds: number;
    };
    type CreateTaskByBranchIds = Omit<CreateTaskByFileIds, 'fileIds'> & {
        branchIds: number;
    };
    interface CreateTaskByFileIdsLanguageService {
        title: string;
        languageId: string;
        type: TypeVendor;
        vendor: 'crowdin_language_service';
        fileIds: number[];
        labelIds?: number[];
        excludeLabelIds?: number[];
        status?: RequestStatus;
        description?: string;
        includePreTranslatedStringsOnly?: boolean;
        assignees?: CreateTaskAssignee[];
        dateFrom?: string;
        dateTo?: string;
    }
    type CreateTaskByStringIdsLanguageService = Omit<CreateTaskByFileIdsLanguageService, 'fileIds' | 'labelIds' | 'excludeLabelIds'> & {
        stringIds: number[];
    };
    type CreateTaskByBranchIdsLanguageService = Omit<CreateTaskByFileIdsLanguageService, 'fileIds'> & {
        branchIds: number[];
    };
    interface CreateTaskVendorOhtByFileIds {
        title: string;
        languageId: string;
        type: TypeVendor;
        vendor: 'oht';
        fileIds: number[];
        labelIds?: number[];
        excludeLabelIds?: number[];
        status?: RequestStatus;
        description?: string;
        expertise?: Expertise;
        editService?: boolean;
        includePreTranslatedStringsOnly?: boolean;
        dateFrom?: string;
        dateTo?: string;
    }
    type CreateTaskVendorOhtByStringIds = Omit<CreateTaskVendorOhtByFileIds, 'fileIds' | 'labelIds' | 'excludeLabelIds'> & {
        stringIds: number[];
    };
    type CreateTaskVendorOhtByBranchIds = Omit<CreateTaskVendorOhtByFileIds, 'fileIds'> & {
        branchIds: number[];
    };
    interface CreateTaskVendorGengoByFileIds {
        title: string;
        languageId: string;
        type: TypeVendor.TRANSLATE_BY_VENDOR;
        vendor: 'gengo';
        fileIds: number[];
        labelIds?: number[];
        excludeLabelIds?: number[];
        status?: RequestStatus;
        description?: string;
        expertise?: 'standard' | 'pro';
        tone?: Tone;
        purpose?: Purpose;
        customerMessage?: string;
        usePreferred?: boolean;
        editService?: boolean;
        dateFrom?: string;
        dateTo?: string;
    }
    type CreateTaskVendorGengoByStringIds = Omit<CreateTaskVendorGengoByFileIds, 'fileIds' | 'labelIds' | 'excludeLabelIds'> & {
        stringIds: number[];
    };
    type CreateTaskVendorGengoByBranchIds = Omit<CreateTaskVendorGengoByFileIds, 'fileIds'> & {
        branchIds: number[];
    };
    interface CreateTaskVendorManualByFileIds {
        title: string;
        languageId: string;
        type: TypeVendor;
        vendor: 'alconost' | 'babbleon' | 'tomedes' | 'e2f' | 'write_path_admin' | 'inlingo' | 'acclaro' | 'translate_by_humans' | 'lingo24' | 'assertio_language_services' | 'gte_localize' | 'kettu_solutions' | 'languageline_solutions';
        fileIds: number[];
        labelIds?: number[];
        excludeLabelIds?: number[];
        status?: RequestStatus;
        description?: string;
        skipAssignedStrings?: boolean;
        includePreTranslatedStringsOnly?: boolean;
        assignees?: CreateTaskAssignee[];
        deadline?: string;
        startedAt?: string;
        dateFrom?: string;
        dateTo?: string;
    }
    type CreateTaskVendorManualByStringIds = Omit<CreateTaskVendorManualByFileIds, 'fileIds' | 'labelIds' | 'excludeLabelIds'> & {
        stringIds: number[];
    };
    type CreateTaskVendorManualByBranchIds = Omit<CreateTaskVendorManualByFileIds, 'fileIds'> & {
        branchIds: number[];
    };
    interface CreateTaskPendingTask {
        precedingTaskId: number;
        type: Type.PROOFREAD;
        title: string;
        description?: string;
        assignees?: CreateTaskAssignee[];
        deadline?: string;
    }
    interface CreateTaskPendingTaskLanguageService {
        precedingTaskId: number;
        type: TypeVendor.PROOFREAD_BY_VENDOR;
        vendor: 'crowdin_language_service';
        title: string;
        description?: string;
        deadline?: string;
    }
    interface CreateTaskPendingTaskVendorManual {
        precedingTaskId: number;
        type: TypeVendor.PROOFREAD_BY_VENDOR;
        vendor: CreateTaskVendorManualByFileIds['vendor'];
        title: string;
        description?: string;
        deadline?: string;
    }
    interface CreateTaskAssignee {
        id: number;
        wordsCount?: number;
    }
    type Status = 'todo' | 'in_progress' | 'done' | 'closed';
    type RequestStatus = Extract<Status, 'todo' | 'in_progress'>;
    enum Type {
        TRANSLATE = 0,
        PROOFREAD = 1
    }
    enum TypeVendor {
        TRANSLATE_BY_VENDOR = 2,
        PROOFREAD_BY_VENDOR = 3
    }
    interface Assignee {
        id: number;
        username: string;
        fullName: string;
        avatarUrl: string;
        wordsCount: number;
        wordsLeft: number;
    }
    interface AssignedTeam {
        id: number;
        wordsCount: number;
    }
    interface Progress {
        total: number;
        done: number;
        percent: number;
    }
    type Expertise = 'standard' | 'mobile-applications' | 'software-it' | 'gaming-video-games' | 'technical-engineering' | 'marketing-consumer-media' | 'business-finance' | 'legal-certificate' | 'medical' | 'ad-words-banners' | 'automotive-aerospace' | 'scientific' | 'scientific-academic' | 'tourism' | 'training-employee-handbooks' | 'forex-crypto';
    enum TranslatedExpertise {
        ECONOMY = "P",
        PROFESSIONAL = "T",
        PREMIUM = "R"
    }
    type Tone = '' | 'Informal' | 'Friendly' | 'Business' | 'Formal' | 'other';
    type Purpose = 'standard' | 'Personal use' | 'Business' | 'Online content' | 'App/Web localization' | 'Media content' | 'Semi-technical' | 'other';
    type Subject = 'general' | 'accounting_finance' | 'aerospace_defence' | 'architecture' | 'art' | 'automotive' | 'certificates_diplomas_licences_cv_etc' | 'chemical' | 'civil_engineering_construction' | 'corporate_social_responsibility' | 'cosmetics' | 'culinary' | 'electronics_electrical_engineering' | 'energy_power_generation_oil_gas' | 'environment' | 'fashion' | 'games_viseogames_casino' | 'general_business_commerce' | 'history_archaeology' | 'information_technology' | 'insurance' | 'internet_e-commerce' | 'legal_documents_contracts' | 'literary_translations' | 'marketing_advertising_material_public_relations' | 'matematics_and_physics' | 'mechanical_manufacturing' | 'media_journalism_publishing' | 'medical_pharmaceutical' | 'music' | 'private_correspondence_letters' | 'religion' | 'science' | 'shipping_sailing_maritime' | 'social_science' | 'telecommunications' | 'travel_tourism';
    interface ListTasksOptions extends PaginationOptions {
        status?: TasksModel.Status;
        assigneeId?: number;
        orderBy?: string;
    }
    interface TaskSettingsTemplate {
        id: number;
        name: string;
        config: TaskSettingsTemplateConfig;
        createdAt: string;
        updatedAt: string;
    }
    interface AddTaskSettingsTemplate {
        name: string;
        config: TaskSettingsTemplateConfig;
    }
    interface TaskSettingsTemplateConfig {
        languages: {
            languageId?: string;
            userIds?: number[];
            teamIds?: number[];
        }[];
    }
    interface TaskComment {
        id: number;
        userId: number;
        taskId: number;
        text: string;
        timeSpent: number;
        createdAt: string;
        updatedAt: string;
    }
    interface CreateTaskCommentRequest {
        text?: string;
        timeSpent?: number;
    }
}
