import { ReviewLanguage } from './constants/ai-messages';
export type AIProviderType = 'openai' | 'deepseek';
export interface BaseProviderConfig {
    apiKey: string;
    model: string;
    baseURL: string;
    defaultHeaders?: Record<string, string>;
    timeout?: number;
}
export interface AIProviderConfig extends BaseProviderConfig {
    provider: AIProviderType;
    reviewLanguage?: ReviewLanguage;
}
export interface ProviderConfig {
    enabled?: boolean;
    apiKey: string;
    model: string;
    baseURL: string;
    defaultHeaders?: Record<string, string>;
    timeout?: number;
    provider?: AIProviderType;
}
export type ProvidersConfig = Record<string, ProviderConfig>;
export interface Config {
    providers: Record<string, ProviderConfig>;
    ai: Omit<AIProviderConfig, 'provider'> & {
        provider: string;
    };
    triggers: Array<{
        on: string;
    }>;
    rules: {
        commitMessage: {
            enabled: boolean;
            pattern: string;
            prompt: string;
        };
        branchName: {
            enabled: boolean;
            pattern: string;
            prompt: string;
        };
        codeChanges: {
            enabled: boolean;
            filePatterns: string[];
            prompt: string;
        };
    };
    customReviewPoints: Array<{
        name: string;
        prompt: string;
    }>;
}
export interface CodeReviewSuggestion {
    message: string;
    filename?: string;
    line?: number;
    severity?: 'info' | 'warning' | 'error';
    side?: 'LEFT' | 'RIGHT';
    startLine?: number;
    endLine?: number;
    commitId?: string;
    diffHunk?: string;
    reviewType: 'general' | 'line-specific';
}
export interface CodeReviewResult {
    success: boolean;
    suggestions: CodeReviewSuggestion[];
    error?: {
        message: string;
    };
}
export interface IAIProvider {
    review(prompt: string, content: string): Promise<string>;
    reviewWithLineSpecificSuggestions?(prompt: string, content: string, fileContext: Array<{
        filePath: string;
        parsedDiff: ParsedDiff;
    }>): Promise<CodeReviewSuggestion[]>;
}
export interface DiffLine {
    lineNumber: number;
    oldLineNumber?: number;
    newLineNumber?: number;
    content: string;
    type: 'add' | 'remove' | 'context';
    position: number;
}
export interface DiffHunk {
    oldStart: number;
    oldLines: number;
    newStart: number;
    newLines: number;
    lines: DiffLine[];
    header: string;
}
export interface ParsedDiff {
    filePath: string;
    oldFile: string;
    newFile: string;
    hunks: DiffHunk[];
    additions: number;
    deletions: number;
}
export interface LineSpecificSuggestion extends CodeReviewSuggestion {
    reviewType: 'line-specific';
    filename: string;
    line: number;
    commitId: string;
    position?: number;
    diffContext: string;
}
