import { CrowdinApi, DownloadLink, PaginationOptions, PatchRequest, ResponseList, ResponseObject, Status } from '../core';
/**
 * Reports help to estimate costs, calculate translation costs, and identify the top members.
 *
 * Use API to generate Cost Estimate, Translation Cost, and Top Members reports.
 * You can then export reports in .xlsx or .csv file formats.
 * Report generation is an asynchronous operation and shall be completed with a sequence of API methods.
 */
export declare class Reports extends CrowdinApi {
    /**
     * @param options optional parameters for the request
     * @see https://developer.crowdin.com/enterprise/api/v2/#operation/api.reports.archives.getMany
     */
    listOrganizationReportArchives(options?: ReportsModel.ListReportArchiveParams): Promise<ResponseList<ReportsModel.ReportArchive>>;
    /**
     * @param archiveId archive identifier
     * @see https://developer.crowdin.com/enterprise/api/v2/#operation/api.reports.archives.get
     */
    getOrganizationReportArchive(archiveId: number): Promise<ResponseObject<ReportsModel.ReportArchive>>;
    /**
     * @param archiveId archive identifier
     * @see https://developer.crowdin.com/enterprise/api/v2/#operation/api.reports.archives.delete
     */
    deleteOrganizationReportArchive(archiveId: number): Promise<void>;
    /**
     * @param archiveId archive identifier
     * @see https://developer.crowdin.com/enterprise/api/v2/#operation/api.reports.archives.exports.post
     */
    exportOrganizationReportArchive(archiveId: number, request?: {
        format?: ReportsModel.Format;
    }): Promise<ResponseObject<Status<ReportsModel.ReportArchiveStatusAttribute>>>;
    /**
     * @param archiveId archive identifier
     * @param exportId export identifier
     * @see https://developer.crowdin.com/enterprise/api/v2/#operation/api.reports.archives.exports.get
     */
    checkOrganizationReportArchiveStatus(archiveId: number, exportId: string): Promise<ResponseObject<Status<ReportsModel.ReportArchiveStatusAttribute>>>;
    /**
     * @param archiveId archive identifier
     * @param exportId export identifier
     * @see https://developer.crowdin.com/enterprise/api/v2/#operation/api.reports.archives.exports.download.get
     */
    downloadOrganizationReportArchive(archiveId: number, exportId: string): Promise<ResponseObject<DownloadLink>>;
    /**
     * @param userId user identifier
     * @param options optional parameters for the request
     * @see https://developer.crowdin.com/api/v2/#operation/api.reports.archives.getMany
     */
    listUserReportArchives(userId: number, options?: ReportsModel.ListReportArchiveParams): Promise<ResponseList<ReportsModel.ReportArchive>>;
    /**
     * @param userId user identifier
     * @param archiveId archive identifier
     * @see https://developer.crowdin.com/api/v2/#operation/api.users.reports.archives.get
     */
    getUserReportArchive(userId: number, archiveId: number): Promise<ResponseObject<ReportsModel.ReportArchive>>;
    /**
     * @param userId user identifier
     * @param archiveId archive identifier
     * @see https://developer.crowdin.com/api/v2/#operation/api.users.reports.archives.delete
     */
    deleteUserReportArchive(userId: number, archiveId: number): Promise<void>;
    /**
     * @param userId user identifier
     * @param archiveId archive identifier
     * @see https://developer.crowdin.com/api/v2/#operation/api.reports.archives.exports.post
     */
    exportUserReportArchive(userId: number, archiveId: number, request?: {
        format?: ReportsModel.Format;
    }): Promise<ResponseObject<Status<ReportsModel.ReportArchiveStatusAttribute>>>;
    /**
     * @param userId user identifier
     * @param archiveId archive identifier
     * @param exportId export identifier
     * @see https://developer.crowdin.com/api/v2/#operation/api.users.reports.archives.exports.get
     */
    checkUserReportArchiveStatus(userId: number, archiveId: number, exportId: string): Promise<ResponseObject<Status<ReportsModel.ReportArchiveStatusAttribute>>>;
    /**
     * @param userId user identifier
     * @param archiveId archive identifier
     * @param exportId export identifier
     * @see https://developer.crowdin.com/api/v2/#operation/api.users.reports.archives.exports.download.get
     */
    downloadUserReportArchive(userId: number, archiveId: number, exportId: string): Promise<ResponseObject<DownloadLink>>;
    /**
     * @param groupId group identifier
     * @param request request body
     * @see https://support.crowdin.com/enterprise/api/#operation/api.groups.reports.post
     */
    generateGroupReport(groupId: number, request: ReportsModel.GenerateGroupReportRequest): Promise<ResponseObject<Status<ReportsModel.ReportStatusAttributes<ReportsModel.GroupReportSchema>>>>;
    /**
     * @param groupId group identifier
     * @param reportId report identifier
     * @see https://support.crowdin.com/enterprise/api/#operation/api.groups.reports.get
     */
    checkGroupReportStatus(groupId: number, reportId: string): Promise<ResponseObject<Status<ReportsModel.ReportStatusAttributes<ReportsModel.GroupReportSchema>>>>;
    /**
     * @param groupId group identifier
     * @param reportId report identifier
     * @see https://support.crowdin.com/enterprise/api/#operation/api.groups.reports.download.download
     */
    downloadGroupReport(groupId: number, reportId: string): Promise<ResponseObject<DownloadLink>>;
    /**
     * @param options optional parameters for the request
     * @see https://support.crowdin.com/developer/enterprise/api/v2/#tag/Reports/operation/api.reports.settings-templates.getMany
     */
    listOrganizationReportSettingsTemplates(options?: ReportsModel.ListOrganizationReportSettingsParams): Promise<ResponseList<ReportsModel.OrganizationReportSettings>>;
    /**
     * @param request request body
     * @see https://support.crowdin.com/developer/enterprise/api/v2/#tag/Reports/operation/api.reports.settings-templates.post
     */
    addOrganizationReportSettingsTemplate(request: ReportsModel.AddOrganizationReportSettingsRequest): Promise<ResponseObject<ReportsModel.OrganizationReportSettings>>;
    /**
     * @param reportSettingsTemplateId report settings template identifier
     * @see https://support.crowdin.com/developer/enterprise/api/v2/#tag/Reports/operation/api.reports.settings-templates.get
     */
    getOrganizationReportSettingsTemplate(reportSettingsTemplateId: number): Promise<ResponseObject<ReportsModel.OrganizationReportSettings>>;
    /**
     * @param reportSettingsTemplateId report settings template identifier
     * @param request request body
     * @see https://support.crowdin.com/developer/enterprise/api/v2/#tag/Reports/operation/api.reports.settings-templates.patch
     */
    editOrganizationReportSettingsTemplate(reportSettingsTemplateId: number, request: PatchRequest[]): Promise<ResponseObject<ReportsModel.OrganizationReportSettings>>;
    /**
     * @param reportSettingsTemplateId report settings template identifier
     * @see https://support.crowdin.com/developer/enterprise/api/v2/#tag/Reports/operation/api.reports.settings-templates.delete
     */
    deleteOrganizationReportSettingsTemplate(reportSettingsTemplateId: number): Promise<void>;
    /**
     * @param request request body
     * @see https://support.crowdin.com/enterprise/api/#operation/api.reports.post
     */
    generateOrganizationReport(request: ReportsModel.GenerateOrganizationReportRequest): Promise<ResponseObject<Status<ReportsModel.ReportStatusAttributes<ReportsModel.OrganizationReportSchema>>>>;
    /**
     * @param reportId report identifier
     * @see https://support.crowdin.com/enterprise/api/#operation/api.reports.get
     */
    checkOrganizationReportStatus(reportId: string): Promise<ResponseObject<Status<ReportsModel.ReportStatusAttributes<ReportsModel.OrganizationReportSchema>>>>;
    /**
     * @param reportId report identifier
     * @see https://support.crowdin.com/enterprise/api/#operation/api.reports.download.download
     */
    downloadOrganizationReport(reportId: string): Promise<ResponseObject<DownloadLink>>;
    /**
     * @param projectId project identifier
     * @param request request body
     * @see https://developer.crowdin.com/api/v2/#operation/api.projects.reports.post
     */
    generateReport(projectId: number, request: ReportsModel.GenerateReportRequest): Promise<ResponseObject<Status<ReportsModel.ReportStatusAttributes<ReportsModel.ReportSchema>>>>;
    /**
     * @param projectId project identifier
     * @param reportId report identifier
     * @see https://developer.crowdin.com/api/v2/#operation/api.projects.reports.get
     */
    checkReportStatus(projectId: number, reportId: string): Promise<ResponseObject<Status<ReportsModel.ReportStatusAttributes<ReportsModel.ReportSchema>>>>;
    /**
     * @param projectId project identifier
     * @param reportId report identifier
     * @see https://developer.crowdin.com/api/v2/#operation/api.projects.reports.download.download
     */
    downloadReport(projectId: number, reportId: string): Promise<ResponseObject<DownloadLink>>;
    /**
     * @param projectId project identifier
     * @param options optional parameters for the request
     * @see https://developer.crowdin.com/api/v2/#operation/api.projects.reports.settings-templates.getMany
     */
    listReportSettingsTemplates(projectId: number, options?: PaginationOptions): Promise<ResponseList<ReportsModel.ReportSettings>>;
    /**
     * @param projectId project identifier
     * @param request request body
     * @see https://developer.crowdin.com/api/v2/#operation/api.projects.reports.settings-templates.post
     */
    addReportSettingsTemplate(projectId: number, request: ReportsModel.AddReportSettingsRequest): Promise<ResponseObject<ReportsModel.ReportSettings>>;
    /**
     * @param projectId project identifier
     * @param reportSettingsTemplateId report settings template identifier
     * @see https://developer.crowdin.com/api/v2/#operation/api.projects.reports.settings-templates.get
     */
    getReportSettingsTemplate(projectId: number, reportSettingsTemplateId: number): Promise<ResponseObject<ReportsModel.ReportSettings>>;
    /**
     * @param projectId project identifier
     * @param reportSettingsTemplateId report settings template identifier
     * @param request request body
     * @see https://developer.crowdin.com/api/v2/#operation/api.projects.reports.settings-templates.patch
     */
    editReportSettingsTemplate(projectId: number, reportSettingsTemplateId: number, request: PatchRequest[]): Promise<ResponseObject<ReportsModel.ReportSettings>>;
    /**
     * @param projectId project identifier
     * @param reportSettingsTemplateId report settings template identifier
     * @see https://developer.crowdin.com/api/v2/#operation/api.projects.settings-templates.delete
     */
    deleteReportSettingsTemplate(projectId: number, reportSettingsTemplateId: number): Promise<void>;
    /**
     * @param userId user identifier
     * @param options optional parameters for the request
     * @see https://support.crowdin.com/developer/api/v2/#tag/Reports/operation/api.users.reports.settings-templates.getMany
     */
    listUserReportSettingsTemplates(userId: number, options?: PaginationOptions): Promise<ResponseList<ReportsModel.UserReportSettings>>;
    /**
     * @param userId user identifier
     * @param request request body
     * @see https://support.crowdin.com/developer/api/v2/#tag/Reports/operation/api.users.reports.settings-templates.post
     */
    addUserReportSettingsTemplate(userId: number, request: ReportsModel.AddUserReportSettingsRequest): Promise<ResponseObject<ReportsModel.UserReportSettings>>;
    /**
     * @param userId user identifier
     * @param reportSettingsTemplateId report settings template identifier
     * @see https://support.crowdin.com/developer/api/v2/#tag/Reports/operation/api.users.reports.settings-templates.get
     */
    getUserReportSettingsTemplate(userId: number, reportSettingsTemplateId: number): Promise<ResponseObject<ReportsModel.UserReportSettings>>;
    /**
     * @param userId user identifier
     * @param reportSettingsTemplateId report settings template identifier
     * @param request request body
     * @see https://support.crowdin.com/developer/api/v2/#tag/Reports/operation/api.users.reports.settings-templates.patch
     */
    editUserReportSettingsTemplate(userId: number, reportSettingsTemplateId: number, request: PatchRequest[]): Promise<ResponseObject<ReportsModel.UserReportSettings>>;
    /**
     * @param userId user identifier
     * @param reportSettingsTemplateId report settings template identifier
     * @see https://support.crowdin.com/developer/api/v2/#tag/Reports/operation/api.users.reports.settings-templates.delete
     */
    deleteUserReportSettingsTemplate(userId: number, reportSettingsTemplateId: number): Promise<void>;
}
export declare namespace ReportsModel {
    interface ReportArchive {
        id: number;
        scopeType: string;
        scopeId: number;
        userId: number;
        name: string;
        webUrl: string;
        scheme: any;
        createdAt: string;
    }
    interface ListReportArchiveParams extends PaginationOptions {
        scopeType: string;
        scopeId: number;
    }
    interface ReportArchiveStatusAttribute {
        format: Format;
        reportName: string;
        schema: any;
    }
    type GroupReportSchema = GroupTranslationCostsPostEditingSchema | GroupTopMembersSchema;
    type OrganizationReportSchema = GroupTranslationCostsPostEditingSchema | GroupTopMembersSchema;
    interface GenerateGroupReportRequest {
        name: string;
        schema: GroupReportSchema;
    }
    interface GenerateOrganizationReportRequest {
        name: string;
        schema: OrganizationReportSchema;
    }
    interface GroupTranslationCostsPostEditingSchema {
        projectIds?: number[];
        unit?: Unit;
        currency?: Currency;
        format?: Format;
        baseRates: BaseRate;
        individualRates: IndividualRate[];
        netRateSchemes: NetRateSchemas;
        excludeApprovalsForEditedTranslations?: boolean;
        preTranslatedStringsCategorizationAdjustment?: boolean;
        groupBy?: GroupBy;
        dateFrom?: string;
        dateTo?: string;
        userIds?: number[];
    }
    interface GroupTranslationCostsPerEditingByTaskSchema {
        unit?: Unit;
        currency?: Currency;
        format?: Format;
        baseRates: BaseRate;
        individualRates: IndividualRate[];
        netRateSchemes: NetRateSchemas;
        taskId?: number;
    }
    interface CostsEstimationSchema {
        projectIds?: number[];
        unit?: Unit;
        currency?: Currency;
        format?: Format;
        baseRates: BaseRate;
        individualRates: IndividualRate[];
        netRateSchemes: NetRateSchemas;
        calculateInternalMatches?: boolean;
        includePreTranslatedStrings?: boolean;
        languageId?: string;
        branchIds?: number[];
        dateFrom?: string;
        dateTo?: string;
        labelIds?: number[];
        labelIncludeType?: LabelIncludeType;
    }
    interface CostsEstimationByTaskSchema {
        unit?: Unit;
        currency?: Currency;
        format?: Format;
        baseRates?: BaseRate;
        individualRates?: IndividualRate[];
        netRateSchemes?: NetRateSchemas;
        calculateInternalMatches?: boolean;
        includePreTranslatedStrings?: boolean;
        taskId?: number;
    }
    interface GroupTopMembersSchema {
        projectIds?: number[];
        unit?: Unit;
        languageId?: string;
        format?: Format;
        dateFrom?: string;
        dateTo?: string;
    }
    interface RawDataSchema {
        mode: ContributionMode;
        unit?: Unit;
        languageId?: string;
        userId?: number;
        dateFrom?: string;
        dateTo?: string;
    }
    type GenerateReportRequest = PreTranslateAccuracy | TranslateAccuracy | CostEstimationPostEnding | TranslationCostsPostEnding | TopMembers | ContributionRawData;
    type ReportSchema = Pick<GenerateReportRequest, 'schema'>;
    interface PreTranslateAccuracy {
        name: 'pre-translate-efficiency' | 'pre-translate-accuracy';
        schema: PreTranslateAccuracySchema | PreTranslateAccuracySchemaByTask;
    }
    interface TranslateAccuracy {
        name: 'translator-accuracy';
        schema: TranslateAccuracySchema;
    }
    interface CostEstimationPostEnding {
        name: 'costs-estimation-pe';
        schema: CostEstimationPostEndingSchema | CostEstimationPostEndingSchemaByTask;
    }
    interface TranslationCostsPostEnding {
        name: 'translation-costs-pe';
        schema: TranslationCostsPostEndingSchema | TranslationCostsPostEndingSchemaByTask;
    }
    interface TopMembers {
        name: 'top-members';
        schema: TopMembersSchema;
    }
    interface ContributionRawData {
        name: 'contribution-raw-data';
        schema: ContributionRawDataSchema | ContributionRawDataSchemaByTask;
    }
    interface ReportStatusAttributes<S> {
        format: Format;
        reportName: string;
        schema: S;
    }
    interface PreTranslateAccuracySchema {
        unit?: Unit;
        format?: Format;
        postEditingCategories?: string[];
        languageId?: string;
        dateFrom?: string;
        dateTo?: string;
    }
    interface PreTranslateAccuracySchemaByTask {
        unit?: Unit;
        format?: Format;
        postEditingCategories?: string[];
        taskId?: number;
    }
    interface TranslateAccuracySchema {
        unit?: Unit;
        format?: Format;
        postEditingCategories?: string[];
        languageId?: string;
        userIds?: number[];
        dateFrom?: string;
        dateTo?: string;
    }
    interface CostEstimationPostEndingSchema {
        unit?: Unit;
        currency?: Currency;
        format?: Format;
        baseRates: BaseRate;
        individualRates: IndividualRate[];
        netRateSchemes: Omit<NetRateSchemas, 'mtMatch' | 'suggestionMatch'>;
        calculateInternalMatches?: boolean;
        includePreTranslatedStrings?: boolean;
        languageId?: string;
        fileIds?: number[];
        directoryIds?: number[];
        branchIds?: number[];
        dateFrom?: string;
        dateTo?: string;
        labelIds?: number[];
        labelIncludeType?: LabelIncludeType;
        workflowStepId?: number;
    }
    interface CostEstimationPostEndingSchemaByTask {
        unit?: Unit;
        currency?: Currency;
        format?: Format;
        baseRates?: BaseRate;
        individualRates?: IndividualRate[];
        netRateSchemes?: Omit<NetRateSchemas, 'mtMatch' | 'suggestionMatch'>;
        calculateInternalMatches?: boolean;
        includePreTranslatedStrings?: boolean;
        taskId?: number;
    }
    interface TranslationCostsPostEndingSchemaByTask {
        unit?: Unit;
        currency?: Currency;
        format?: Format;
        baseRates: BaseRate;
        individualRates: IndividualRate[];
        netRateSchemes: NetRateSchemas;
        taskId?: number;
        excludeApprovalsForEditedTranslations?: boolean;
        preTranslatedStringsCategorizationAdjustment?: boolean;
    }
    interface TranslationCostsPostEndingSchema {
        unit?: Unit;
        currency?: Currency;
        format?: Format;
        baseRates: BaseRate;
        individualRates: IndividualRate[];
        netRateSchemes: NetRateSchemas;
        excludeApprovalsForEditedTranslations?: boolean;
        preTranslatedStringsCategorizationAdjustment?: boolean;
        groupBy?: GroupBy;
        dateFrom?: string;
        dateTo?: string;
        languageId?: string;
        userIds?: number[];
        fileIds?: number[];
        directoryIds?: number[];
        branchIds?: number[];
        labelIds?: number;
        labelIncludeType?: LabelIncludeType;
        workflowStepId?: number;
    }
    interface TopMembersSchema {
        unit?: Unit;
        languageId?: string;
        format?: Format;
        dateFrom?: string;
        dateTo?: string;
    }
    interface ContributionRawDataSchema {
        mode: ContributionMode;
        unit?: Unit;
        languageId?: string;
        userId?: string;
        columns?: Column[];
        fileIds?: number[];
        directoryIds?: number[];
        branchIds?: number[];
        tmIds?: number[];
        mtIds?: number[];
        aiPromptIds?: number[];
        dateFrom?: string;
        dateTo?: string;
    }
    interface ContributionRawDataSchemaByTask {
        mode: ContributionMode;
        unit?: Unit;
        taskId: number;
        columns?: Column[];
        tmIds?: number[];
        mtIds?: number[];
        aiPromptIds?: number[];
        dateFrom?: string;
        dateTo?: string;
    }
    interface PreTranslateEfficiencySchema {
        unit?: Unit;
        format?: Format;
        postEditingCategories?: string[];
        languageId?: string;
        dateFrom?: string;
        dateTo?: string;
    }
    interface ListOrganizationReportSettingsParams extends PaginationOptions {
        projectId?: number;
        groupId?: number;
    }
    interface ReportSettings {
        id: number;
        name: string;
        currency: Currency;
        unit: Unit;
        config: ReportSettinsConfig;
        isPublic: boolean;
        isGlobal: boolean;
        createdAt: string;
        updatedAt: string;
    }
    interface AddReportSettingsRequest {
        name: string;
        currency: Currency;
        unit: Unit;
        config: ReportSettinsConfig;
        isPublic?: boolean;
        isGlobal?: boolean;
    }
    type UserReportSettings = Omit<ReportSettings, 'isPublic' | 'isGlobal'>;
    type AddUserReportSettingsRequest = Omit<AddReportSettingsRequest, 'isPublic' | 'isGlobal'>;
    type OrganizationReportSettings = Omit<ReportSettings, 'isGlobal'> & {
        projectId: number;
        groupId: number;
    };
    type AddOrganizationReportSettingsRequest = Omit<AddReportSettingsRequest, 'isGlobal'> & {
        projectId?: number;
        groupId?: number;
    };
    interface ReportSettinsConfig {
        baseRates: BaseRate;
        netRateSchemes: NetRateSchemas[];
        individualRates: IndividualRate[];
    }
    type Unit = 'strings' | 'words' | 'chars' | 'chars_with_spaces';
    type Currency = 'USD' | 'EUR' | 'JPY' | 'GBP' | 'AUD' | 'CAD' | 'CHF' | 'CNY' | 'SEK' | 'NZD' | 'MXN' | 'SGD' | 'HKD' | 'NOK' | 'KRW' | 'TRY' | 'RUB' | 'INR' | 'BRL' | 'ZAR' | 'GEL' | 'UAH';
    type Format = 'xlsx' | 'csv' | 'json';
    interface BaseRate {
        fullTranslation: number;
        proofread: number;
    }
    interface IndividualRate extends BaseRate {
        languageIds: string[];
        userIds: number[];
        fullTranslation: number;
        proofread: number;
    }
    interface NetRateSchemas {
        tmMatch: {
            matchType: Mode;
            price: number;
        }[];
        mtMatch: {
            matchType: Mode;
            price: number;
        }[];
        suggestionMatch: {
            matchType: Mode;
            price: number;
        }[];
        aiMatch?: {
            matchType: Mode;
            price: number;
        }[];
    }
    type Mode = 'no_match' | 'tm_match' | 'approval' | '99-95' | '94-90' | '89-80' | 'perfect' | '100';
    type ContributionMode = 'translations' | 'approvals' | 'votes';
    type GroupBy = 'user' | 'language';
    type LabelIncludeType = 'strings_with_label' | 'strings_without_label';
    type Column = 'userId' | 'languageId' | 'stringId' | 'translationId' | 'fileId' | 'filePath' | 'pluralForm' | 'sourceStringTextHash' | 'mtEngine' | 'mtId' | 'tmName' | 'tmId' | 'aiPromptName' | 'aiPromptId' | 'preTranslated' | 'tmMatch' | 'mtMatch' | 'aiMatch' | 'suggestionMatch' | 'sourceUnits' | 'targetUnits' | 'createdAt' | 'updatedAt' | 'mark';
}
