import { ReviewHint, ReviewResponse } from './index.js';
/**
 * Abstract base class for AI provider implementations
 *
 * Defines the contract for AI services that can generate code reviews
 * and analysis responses. Implementations should handle specific AI
 * provider APIs like OpenAI, Anthropic, or Azure OpenAI.
 *
 * @example
 * ```typescript
 * class CustomAIProvider extends AIProvider {
 *   async generateResponse(prompt: string): Promise<string> {
 *     // Implementation specific logic
 *     return 'AI response';
 *   }
 * }
 * ```
 */
export default abstract class AIProvider {
    private apiKey;
    private model;
    private maxTokens;
    private apiEndpoint?;
    private apiVersion?;
    /**
     * Creates a new AI provider instance
     *
     * @param apiKey - The API key for the AI provider
     * @param model - The model name to use for AI processing
     */
    /**
     * Creates a new AI provider instance
     *
     * @param apiKey - The API key for authentication
     * @param model - The AI model to use for requests
     * @param apiEndpoint - Optional custom API endpoint URL
     * @param apiVersion - Optional API version specification
     * @example
     * ```typescript
     * const provider = new OpenAIProvider(
     *   'sk-...',
     *   'gpt-4',
     *   'https://api.openai.com/v1',
     *   '2023-05-15'
     * );
     * ```
     */
    constructor(apiKey: string, model: string, apiEndpoint?: string, apiVersion?: string);
    /**
     * Generates a prompt for AI code review based on code snippet and hints
     *
     * @param codeSnippet - The code to be reviewed
     * @param hints - Array of review hints from static analysis tools
     * @returns Formatted prompt string for AI review
     * @example
     * ```typescript
     * const prompt = AIProvider.generatePrompt(
     *   'function add(a, b) { return a + b; }',
     *   [{type: 'error', message: 'Missing type annotations'}]
     * );
     * ```
     */
    protected static generatePrompt(codeSnippet: string, hints: ReviewHint[]): string;
    /**
     * Gets the review instructions for AI providers
     *
     * @returns The review instructions string
     */
    protected static getReviewInstructions(): string;
    /**
     * Formats review hints into a readable string format
     *
     * @param hint - The review hint to format
     * @returns Formatted hint string
     */
    private static formatHints;
    /**
     * Gets the API endpoint for the AI provider, if set
     *
     * @returns The API endpoint for the AI provider, if set
     */
    getAPIEndpoint(): string | undefined;
    /**
     * Gets the API version for the AI provider, if set
     *
     * @returns The API version for the AI provider, if set
     */
    getAPIVersion(): string | undefined;
    /**
     * Gets the AI model name
     *
     * @returns The model name
     */
    getModel(): string;
    /**
     * Gets the API key
     *
     * @returns The API key
     */
    getApiKey(): string;
    /**
     * Gets the maximum number of tokens for AI requests
     *
     * @returns The maximum token count
     */
    getMaxTokens(): number;
    /**
     * Sets the maximum number of tokens for AI requests
     *
     * @param maxTokens - The maximum token count to set
     */
    setMaxTokens(maxTokens: number): void;
    /**
     * Reviews code using the AI provider
     *
     * @param codeSnippet - The code to be reviewed
     * @param hints - Array of review hints from static analysis tools
     * @returns Promise that resolves to the AI review response
     */
    abstract reviewCode(codeSnippet: string, hints: ReviewHint[]): Promise<ReviewResponse>;
}
