import { AudioTranslator } from "./audioTranslator";
import type { AccessKey, AuthToken } from "./credentials";
import { Documents } from "./documents";
import { Glossaries } from "./glossaries";
import { ImageTranslator } from "./imageTranslator";
import { Memories } from "./memories";
import { type LaraClient } from "./net/lara";
import { Styleguides } from "./styleguides";
export type TranslatorOptions = {
    serverUrl?: string;
    connectionTimeoutMs?: number;
    keepAlive?: boolean;
};
export interface NGMemoryMatch {
    memory: string;
    tuid?: string;
    language: [string, string];
    sentence: string;
    translation: string;
    score: number;
}
export interface NGGlossaryMatch {
    glossary: string;
    language: [string, string];
    term: string;
    translation: string;
}
export interface ProfanityDetectResult {
    maskedText: string;
    profanities: {
        text: string;
        startCharIndex: number;
        endCharIndex: number;
        score: number;
    }[];
    error?: string;
}
export interface ProfanitiesResult {
    target: ProfanityDetectResult | ProfanityDetectResult[];
    source?: ProfanityDetectResult | ProfanityDetectResult[];
}
export interface TextBlock {
    readonly text: string;
    readonly translatable?: boolean;
}
export type StyleguideChange = {
    id?: string;
    originalTranslation: string;
    refinedTranslation: string;
    explanation: string;
};
export type StyleguideResults<T extends string | string[] | TextBlock[]> = {
    originalTranslation: T;
    changes: StyleguideChange[];
};
export interface TextResult<T extends string | string[] | TextBlock[]> {
    readonly contentType: string;
    readonly sourceLanguage: string;
    readonly translation: T;
    readonly adaptedTo?: string[];
    readonly glossaries?: string[];
    readonly adaptedToMatches?: NGMemoryMatch[] | NGMemoryMatch[][];
    readonly glossariesMatches?: NGGlossaryMatch[] | NGGlossaryMatch[][];
    readonly profanities?: ProfanitiesResult;
    readonly styleguideResults?: StyleguideResults<T>;
}
export type TranslateOptions = {
    sourceHint?: string;
    adaptTo?: string[];
    instructions?: string[];
    glossaries?: string[];
    contentType?: string;
    multiline?: boolean;
    timeoutInMillis?: number;
    priority?: "normal" | "background";
    useCache?: boolean | "overwrite";
    cacheTTLSeconds?: number;
    noTrace?: boolean;
    verbose?: boolean;
    headers?: Record<string, string>;
    style?: TranslationStyle;
    reasoning?: boolean;
    metadata?: string | Record<string, unknown>;
    profanitiesDetect?: ProfanitiesDetect;
    profanitiesHandling?: ProfanitiesHandling;
    styleguideId?: string;
    styleguideReasoning?: boolean;
    styleguideExplanationLanguage?: string;
};
export type TranslationStyle = "faithful" | "fluid" | "creative";
export type ProfanitiesDetect = "target" | "source_target";
export type ProfanitiesHandling = "hide" | "avoid" | "detect";
export interface QualityEstimationResult {
    score: number;
}
export interface DetectResult {
    language: string;
    contentType: string;
    predictions: {
        language: string;
        confidence: number;
    }[];
}
export declare class Translator {
    protected readonly client: LaraClient;
    readonly memories: Memories;
    readonly documents: Documents;
    readonly glossaries: Glossaries;
    readonly styleguides: Styleguides;
    readonly audio: AudioTranslator;
    readonly images: ImageTranslator;
    constructor(auth: AccessKey | AuthToken, options?: TranslatorOptions);
    get version(): string;
    getLanguages(): Promise<string[]>;
    translate<T extends string | string[] | TextBlock[]>(text: T, source: string | null, target: string, options?: TranslateOptions, callback?: (partialResult: TextResult<T>) => void): Promise<TextResult<T>>;
    detect(text: string | string[], hint?: string, passlist?: string[]): Promise<DetectResult>;
    detectProfanities(text: string, language: string, contentType: string): Promise<ProfanityDetectResult>;
    qualityEstimation(source: string, target: string, sentence: string | string[], translation: string | string[]): Promise<QualityEstimationResult | QualityEstimationResult[]>;
    static getLoginUrl(serverUrl?: string): Promise<string>;
}
