interface ILinguixMessage {
    type: string;
    id: string;
    payload?: any;
    [key: string]: any;
}

interface ILinguixBackgroundMessenger {
    sendToContent(message: ILinguixMessage): void;
    onContentMessage(callback: (message: ILinguixMessage) => void): void;
    destroy(): void;
}

interface ILinguixTextStats {
    wordsCount: number;
    charsCount: number;
    avgWordLength: number;
    avgSentenceLength: number;
    sentencesCount: number;
    fleschIndex: number;
    textScore: number;
    readingTimeSeconds: number;
    speakingTimeSeconds: number;
}

interface ILinguixConfig {
    url?: string;
    apiKey?: string;
    options?: {
        query?: {
            clientToken?: string;
        };
    };
    customTagNames?: {
        highlighter?: string;
        alert?: string;
    };
    language?: string;
    callbacks?: ILinguixCallbacks;
}
interface ILinguixCallbacks {
    onCheckResultReceived?: (result: {
        textStats?: ILinguixTextStats;
        alertsCount: number;
    }) => void;
    onReplacementApplied?: (data: {
        originalText: string;
        replacement: string;
        description: string;
    }) => void;
}
interface ILinguixElementConfig {
    callbacks?: ILinguixCallbacks;
}

declare class LinguixCheckerSDK {
    private static instance;
    static initialize(config: ILinguixConfig, messenger: ILinguixBackgroundMessenger): void;
    static destroy(): void;
}

export { type ILinguixBackgroundMessenger, type ILinguixCallbacks, type ILinguixConfig, type ILinguixElementConfig, type ILinguixMessage, LinguixCheckerSDK };
