import Crowdin, { ReportsModel, SourceFilesModel, TranslationsModel, WebhooksModel } from '@crowdin/crowdin-api-client';
interface UpdateOrCreateFileArgs {
    client: Crowdin;
    projectId: number;
    name: string;
    title?: string;
    type?: SourceFilesModel.FileType;
    directoryId?: number;
    data: any;
    file?: SourceFilesModel.File;
    excludedTargetLanguages?: string[];
    importOptions?: SourceFilesModel.ImportOptions;
}
/**
 *
 * @param client crowdin client instance
 * @param projectId crowdin project id
 * @param name file name
 * @param title file title
 * @param type file type
 * @param directoryId directory id
 * @param data file data
 * @param file file object
 * @param excludedTargetLanguages languages to be excluded from translation
 * @returns id of newly created or existing file id
 */
export declare function updateOrCreateFile(client: Crowdin, projectId: number, name: string, title: string, type: SourceFilesModel.FileType, directoryId: number, data: any, file?: SourceFilesModel.File, excludedTargetLanguages?: string[]): Promise<number>;
export declare function updateOrCreateFile(args: UpdateOrCreateFileArgs): Promise<number>;
interface GetFolderArgs {
    directories: SourceFilesModel.Directory[];
    client: Crowdin;
    projectId: number;
    directoryName: string;
    parentDirectory?: SourceFilesModel.Directory;
}
/**
 *
 * @param directories all directories
 * @param crowdinClient crowdin client instance
 * @param projectId project id
 * @param directoryName directory name to find
 * @param parentDirectory parent directory
 * @returns found folder (or undefined in case if directory for given name does not exists) and files under it
 */
export declare function getFolder(directories: SourceFilesModel.Directory[], crowdinClient: Crowdin, projectId: number, directoryName: string, parentDirectory?: SourceFilesModel.Directory): Promise<{
    folder?: SourceFilesModel.Directory;
    files: SourceFilesModel.File[];
}>;
export declare function getFolder(args: GetFolderArgs): Promise<{
    folder?: SourceFilesModel.Directory;
    files: SourceFilesModel.File[];
}>;
/**
 *
 * @param directories all directories
 * @param crowdinClient crowdin client instance
 * @param projectId project id
 * @param directoryName directory name to find
 * @param parentDirectory parent directory
 * @returns found or created folder and files under it
 */
export declare function getOrCreateFolder(directories: SourceFilesModel.Directory[], crowdinClient: Crowdin, projectId: number, directoryName: string, parentDirectory?: SourceFilesModel.Directory): Promise<{
    folder: SourceFilesModel.Directory;
    files: SourceFilesModel.File[];
    created: boolean;
}>;
export declare function getOrCreateFolder(args: GetFolderArgs): Promise<{
    folder: SourceFilesModel.Directory;
    files: SourceFilesModel.File[];
    created: boolean;
}>;
interface UploadTranslationsArgs {
    client: Crowdin;
    projectId: number;
    fileId: number;
    language: string;
    fileName: string;
    fileContent: any;
    request?: Omit<TranslationsModel.UploadTranslationRequest, 'fileId' | 'storageId'>;
}
/**
 *
 * @param crowdinClient crowdin client instance
 * @param projectId project id
 * @param fileId file id
 * @param language language id
 * @param fileName file name for upload storage request
 * @param fileContent file content
 * @param request extra request fields for upload translation request
 * @returns upload translation response
 */
export declare function uploadTranslations(crowdinClient: Crowdin, projectId: number, fileId: number, language: string, fileName: string, fileContent: any, request?: Omit<TranslationsModel.UploadTranslationRequest, 'fileId' | 'storageId'>): Promise<TranslationsModel.UploadTranslationResponse>;
export declare function uploadTranslations(args: UploadTranslationsArgs): Promise<TranslationsModel.UploadTranslationResponse>;
interface UpdateSourceFilesArgs {
    client: Crowdin;
    projectId: number;
    directory: string;
    fileEntities: FileEntity[];
    parentDirectory?: SourceFilesModel.Directory;
}
/**
 *
 * @param crowdinClient crowdin client instance
 * @param projectId project id
 * @param directory directory name where files are located
 * @param fileEntities files information
 * @param parentDirectory parent directory
 */
export declare function updateSourceFiles(crowdinClient: Crowdin, projectId: number, directory: string, fileEntities: FileEntity[], parentDirectory?: SourceFilesModel.Directory): Promise<void>;
export declare function updateSourceFiles(args: UpdateSourceFilesArgs): Promise<void>;
interface HandleTranslationsArgs {
    client: Crowdin;
    projectId: number;
    directory: string;
    request: TranslationsRequest;
    parentDirectory?: SourceFilesModel.Directory;
    handleFn: (translations: any, language: string, file: SourceFilesModel.File) => Promise<void>;
}
/**
 *
 * @param crowdinClient crowdin client instance
 * @param projectId projecy id
 * @param directory directory name where source files are located
 * @param request request if file files and languages info
 * @param handleFn function that will be invoked for each translation file
 * @param parentDirectory parent directory
 */
export declare function handleTranslations(crowdinClient: Crowdin, projectId: number, directory: string, request: TranslationsRequest, handleFn: (translations: any, language: string, file: SourceFilesModel.File) => Promise<void>, parentDirectory?: SourceFilesModel.Directory): Promise<void>;
export declare function handleTranslations(args: HandleTranslationsArgs): Promise<void>;
interface CreateOrUpdateWebhookArgs {
    client: Crowdin;
    projectId: number;
    url: string;
    events: WebhooksModel.Event[];
    payload: any;
    name: string;
    requestType?: WebhooksModel.RequestType;
    batchingEnabled?: boolean;
    headers?: Record<string, string>;
    contentType?: WebhooksModel.ContentType;
    webhookId?: number;
    webhookMatch?: (webhook: WebhooksModel.Webhook) => boolean;
}
/**
 * Function to update or create webhook
 *
 * @returns updated or created webhook id
 */
export declare function createOrUpdateWebhook(args: CreateOrUpdateWebhookArgs): Promise<number>;
export declare class PaymentRequiredError extends Error {
    subscribeLink: string;
    initializedAt: string;
    constructor(subscribeLink: string, initializedAt: string);
}
/**
 *
 * @param param0.appIdentifier method request
 * @param param0.token bearer token
 * @param param0.organization crowdin organization
 */
export declare function getSubscription({ appIdentifier, token, organization, baseUrl, }: SubscriptionRequest): Promise<Subscription>;
export declare function generateReport({ client, projectId, request, }: {
    client: Crowdin;
    projectId: number;
    request: ReportsModel.GenerateReportRequest;
}): Promise<any | undefined>;
export interface FileEntity {
    name: string;
    title: string;
    type: SourceFilesModel.FileType;
    data: any;
}
export interface TranslationsRequest {
    [fileId: string]: string[];
}
export interface SubscriptionRequest {
    token: string;
    organization?: string;
    appIdentifier: string;
    baseUrl?: string;
}
export interface Subscription {
    expires: string;
}
export {};
