import { ModuleKey } from '../../types';
import Crowdin from '@crowdin/crowdin-api-client';
export interface Webhook extends ModuleKey {
    /**
     * Events that the webhook should listen to
     */
    events: string[];
    /**
     * handle function
     */
    callback: (data: {
        webhookContext: WebhookContext;
        events: Event[];
        client: Crowdin;
    }) => Promise<void>;
    /**
     * If true, response will be sent after webhook processing is complete.
     * This is required for Cloudflare Workers where the execution context
     * terminates after the response is sent.
     * Default: false (response is sent immediately after signature verification)
     */
    deferResponse?: boolean;
}
interface WebhookContext {
    domain?: string;
    organizationId?: number;
    userId?: number;
    agentId?: number;
}
interface EventPayload {
    event: string;
}
interface BranchPayload {
    id: number;
}
interface FilePayload {
    id: number;
    name: string;
    title: string | null;
    type: string;
    path: string;
    status: string;
    revision: number;
    branchId: number | null;
    directoryId: number | null;
    project?: ProjectPayload;
}
interface GroupPayload {
    id: number;
    name: string;
    createdAt: string;
    updatedAt: string;
    description: string | null;
    parentId: number;
    userId: number;
    organizationId: number;
}
interface LanguagePayload {
    id: string;
    name: string;
    editorCode: string;
    twoLettersCode: string;
    threeLettersCode: string;
    locale: string;
    androidCode: string;
    osxCode: string;
    osxLocale: string;
    textDirection: string;
    dialectOf: string;
}
interface ProjectBuildPayload {
    id: number;
    downloadUrl: string;
    project: ProjectPayload;
}
interface ProjectPayload {
    id: number;
    userId: number;
    sourceLanguageId: string;
    targetLanguageIds: string[];
    identifier: string;
    name: string;
    createdAt: string;
    updatedAt: string;
    lastActivity: string;
    description: string;
    url: string;
    cname: string | null;
    languageAccessPolicy?: string;
    visibility?: string;
    publicDownloads?: boolean;
    logo?: string;
    isExternal?: boolean;
    externalType?: string | null;
    hasCrowdsourcing?: boolean;
}
interface StepPayload {
    name: string;
}
interface SuggestionPayload {
    id: number;
    text: string;
    pluralCategoryName: string | null;
    rating: number;
    provider: string | null;
    isPreTranslated: boolean;
    createdAt: string;
    step?: StepPayload | null;
}
interface NewSuggestionPayload {
    user: UserPayload | null;
    targetLanguage: LanguagePayload | null;
    string: TranslationPayload | null;
}
interface TaskPayload {
    id: number;
    type: number;
    vendor?: string | null;
    status?: string | null;
    title: string;
    assignees: TaskAssigneeUserPayload[];
    assignedTeams: TaskAssigneeTeamPayload[];
    fileIds?: number[];
    branchIds?: number[];
    progress: {
        total: number;
        done: number;
        percent: number;
    };
    description: string;
    translationUrl: string | null;
    wordsCount: number;
    filesCount?: number;
    commentsCount: number;
    deadline: string;
    timeRange: string | null;
    workflowStepId: number;
    buyUrl: string;
    createdAt: string;
    updatedAt: string;
    oldStatus: string | null;
    newStatus: string | null;
    sourceLanguage: LanguagePayload;
    targetLanguage: LanguagePayload | null;
    project: ProjectPayload;
    taskCreator: UserPayload;
}
interface TranslationDiscussionsPayload {
    id: number;
    text: string;
    type: string;
    issueType: string;
    issueStatus: string;
    resolvedAt: string;
    createdAt: string;
    string: TranslationPayload;
    targetLanguage: LanguagePayload;
    user: UserPayload;
    commentResolver: UserPayload;
}
interface TranslationPayload {
    id: number;
    identifier: string;
    key: string;
    text: string;
    type: string;
    context: string;
    maxLength: number;
    isHidden: boolean;
    isDuplicate: boolean;
    masterStringId: number;
    revision?: number;
    hasPlurals: boolean;
    labelIds: number[];
    url: string;
    createdAt: string;
    updatedAt: string;
    file?: FilePayload;
    branch?: BranchPayload;
    project: ProjectPayload;
}
interface UserPayload {
    id: number;
    username: string;
    fullName: string;
    avatarUrl: string;
}
interface TaskAssigneeUserPayload extends UserPayload {
    worksCount: number;
    wordsLeft: number;
}
interface TaskAssigneeTeamPayload {
    id: number;
    wordsCount: number;
}
export interface FileTranslatedEvent extends EventPayload {
    file: FilePayload;
    targetLanguage: LanguagePayload;
    step?: StepPayload;
}
export interface FileApprovedEvent extends EventPayload {
    file: FilePayload;
    targetLanguage: LanguagePayload;
    step?: StepPayload;
}
export interface FileAddedEvent extends EventPayload {
    file: FilePayload;
    user: UserPayload;
}
export interface FileUpdatedEvent extends EventPayload {
    file: FilePayload;
    user: UserPayload;
}
export interface FileRevertedEvent extends EventPayload {
    file: FilePayload;
    user: UserPayload;
}
export interface FileDeletedEvent extends EventPayload {
    file: FilePayload;
    user: UserPayload;
}
export interface ProjectTranslatedEvent extends EventPayload {
    project: ProjectPayload;
    targetLanguage: LanguagePayload;
    workflowStep: StepPayload;
}
export interface ProjectApprovedEvent extends EventPayload {
    project: ProjectPayload;
    targetLanguage: LanguagePayload;
    workflowStep: StepPayload;
}
export interface ProjectBuiltEvent extends EventPayload {
    build: ProjectBuildPayload;
}
export interface TopSuggestionUpdatedEvent extends EventPayload {
    oldTranslation: SuggestionPayload;
    newTranslation: NewSuggestionPayload;
}
export interface SuggestionAddedEvent extends EventPayload {
    translation: TranslationPayload;
}
export interface SuggestionUpdatedEvent extends EventPayload {
    translation: TranslationPayload;
}
export interface SuggestionDeletedEvent extends EventPayload {
    translation: TranslationPayload;
}
export interface SuggestionApprovedEvent extends EventPayload {
    translation: TranslationPayload;
}
export interface SuggestionDisapprovedEvent extends EventPayload {
    translation: TranslationPayload;
}
export interface StringAddedEvent extends EventPayload {
    string: TranslationPayload;
    user: UserPayload;
}
export interface StringUpdatedEvent extends EventPayload {
    string: TranslationPayload;
    user: UserPayload;
}
export interface StringDeletedEvent extends EventPayload {
    string: TranslationPayload;
    user: UserPayload;
}
export interface TranslationDiscussionsCreatedEvent extends EventPayload {
    comment: TranslationDiscussionsPayload;
}
export interface TranslationDiscussionsUpdatedEvent extends EventPayload {
    comment: TranslationDiscussionsPayload;
}
export interface TranslationDiscussionsDeletedEvent extends EventPayload {
    comment: TranslationDiscussionsPayload;
}
export interface TranslationDiscussionsRestoredEvent extends EventPayload {
    comment: TranslationDiscussionsPayload;
}
export interface TaskAddedEvent extends EventPayload {
    task: TaskPayload;
}
export interface TaskStatusChangedEvent extends EventPayload {
    task: TaskPayload;
}
export interface TaskDeletedEvent extends EventPayload {
    task: TaskPayload;
}
export interface TaskUpdatedEvent extends EventPayload {
    task: TaskPayload;
}
export interface ProjectCreatedEvent extends EventPayload {
    project: ProjectPayload;
    user: UserPayload;
}
export interface ProjectDeletedEvent extends EventPayload {
    project: ProjectPayload;
    user: UserPayload;
}
export interface GroupCreatedEvent extends EventPayload {
    group: GroupPayload;
    user: UserPayload;
}
export interface GroupDeletedEvent extends EventPayload {
    group: GroupPayload;
    user: UserPayload;
}
export type Event = FileTranslatedEvent | FileApprovedEvent | FileAddedEvent | FileUpdatedEvent | FileRevertedEvent | FileDeletedEvent | ProjectTranslatedEvent | ProjectApprovedEvent | ProjectBuiltEvent | TopSuggestionUpdatedEvent | SuggestionAddedEvent | SuggestionUpdatedEvent | SuggestionDeletedEvent | SuggestionApprovedEvent | SuggestionDisapprovedEvent | StringAddedEvent | StringUpdatedEvent | StringDeletedEvent | TranslationDiscussionsCreatedEvent | TranslationDiscussionsUpdatedEvent | TranslationDiscussionsDeletedEvent | TranslationDiscussionsRestoredEvent | TaskAddedEvent | TaskStatusChangedEvent | TaskDeletedEvent | TaskUpdatedEvent | ProjectCreatedEvent | ProjectDeletedEvent | GroupCreatedEvent | GroupDeletedEvent;
export {};
