import { SelectQuery } from '../models/SelectQuery';
import { CTEQuery } from '../models/Clause';
/**
 * Information about a table available in the current scope
 */
export interface AvailableTable {
    /** Table name (unqualified) */
    name: string;
    /** Table alias (if any) */
    alias?: string;
    /** Schema name (if qualified) */
    schema?: string;
    /** Full qualified name */
    fullName: string;
    /** Source type: 'table', 'cte', 'subquery' */
    sourceType: 'table' | 'cte' | 'subquery';
    /** Original table reference for subqueries */
    originalQuery?: SelectQuery;
}
/**
 * Information about a CTE available in the current scope
 */
export interface AvailableCTE {
    /** CTE name */
    name: string;
    /** Column names if determinable */
    columns?: string[];
    /** The CTE query definition (SELECT or writable DML with RETURNING) */
    query: CTEQuery;
    /** Whether the CTE is materialized */
    materialized?: boolean;
}
/**
 * Information about columns available for a specific table
 */
export interface AvailableColumn {
    /** Column name */
    name: string;
    /** Table name the column belongs to */
    tableName: string;
    /** Table alias (if any) */
    tableAlias?: string;
    /** Data type (if known) */
    type?: string;
    /** Whether column is nullable */
    nullable?: boolean;
    /** Full qualified column reference */
    fullReference: string;
}
/**
 * Complete scope information at a cursor position
 */
export interface ScopeInfo {
    /** Tables available at the current position */
    availableTables: AvailableTable[];
    /** CTEs available at the current position */
    availableCTEs: AvailableCTE[];
    /** Nesting level (0 = root query) */
    subqueryLevel: number;
    /** Columns visible from all tables in scope */
    visibleColumns: AvailableColumn[];
    /** Current query being analyzed */
    currentQuery?: SelectQuery;
    /** Parent queries (for nested contexts) */
    parentQueries: SelectQuery[];
}
/**
 * Resolves scope information at cursor positions for SQL IntelliSense
 *
 * Provides comprehensive scope analysis including table availability, CTE resolution,
 * and column visibility for intelligent code completion suggestions.
 *
 * @example
 * ```typescript
 * const sql = `
 *   WITH users AS (SELECT id, name FROM accounts)
 *   SELECT u.name FROM users u
 *   LEFT JOIN orders o ON u.id = o.user_id
 *   WHERE u.|
 * `;
 * const scope = ScopeResolver.resolveAt(sql, { line: 4, column: 12 });
 *
 * console.log(scope.availableTables); // [{ name: 'users', alias: 'u' }, { name: 'orders', alias: 'o' }]
 * console.log(scope.availableCTEs); // [{ name: 'users', columns: ['id', 'name'] }]
 * ```
 */
export declare class ScopeResolver {
    /**
     * Resolve scope information at the specified cursor position
     *
     * @param sql - SQL text to analyze
     * @param cursorPosition - Character position of cursor (0-based)
     * @returns Complete scope information
     */
    static resolve(sql: string, cursorPosition: number): ScopeInfo;
    /**
     * Resolve scope information at line/column position
     *
     * @param sql - SQL text to analyze
     * @param position - Line and column position (1-based)
     * @returns Complete scope information
     */
    static resolveAt(sql: string, position: {
        line: number;
        column: number;
    }): ScopeInfo;
    /**
     * Get available columns for a specific table or alias
     *
     * @param sql - SQL text containing the query
     * @param cursorPosition - Cursor position for scope resolution
     * @param tableOrAlias - Table name or alias to get columns for
     * @returns Array of available columns for the specified table
     */
    static getColumnsForTable(sql: string, cursorPosition: number, tableOrAlias: string): AvailableColumn[];
    private static analyzeScopeFromQuery;
    private static collectCTEs;
    private static collectTablesFromQuery;
    private static extractTablesFromFromClause;
    private static extractTablesFromJoin;
    private static getQualifiedNameString;
    private static extractTableName;
    private static extractSchemaName;
    private static extractCTEColumns;
    private static extractColumnsFromItems;
    private static extractColumnNameFromExpression;
    private static isSelectQuery;
    private static collectVisibleColumns;
    private static createEmptyScope;
}
