import { BaseDataFlowNode, DataSourceNode, ProcessNode, OperationNode, OutputNode } from './DataFlowNode';
import { DataFlowConnection } from './DataFlowEdge';
/**
 * Represents the complete data flow graph for a SQL query
 */
export declare class DataFlowGraph {
    private nodes;
    private edges;
    addNode(node: BaseDataFlowNode): void;
    addEdge(edge: DataFlowConnection): void;
    addConnection(from: string, to: string, label?: string): void;
    hasNode(nodeId: string): boolean;
    hasConnection(from: string, to: string): boolean;
    getNode(nodeId: string): BaseDataFlowNode | undefined;
    getAllNodes(): BaseDataFlowNode[];
    getAllEdges(): DataFlowConnection[];
    /**
     * Generates the complete Mermaid flowchart syntax
     */
    generateMermaid(direction?: string, title?: string): string;
    /**
     * Creates or gets a table node
     */
    getOrCreateTable(tableName: string): DataSourceNode;
    /**
     * Creates or gets a CTE node
     */
    getOrCreateCTE(cteName: string): DataSourceNode;
    /**
     * Creates or gets a subquery node
     */
    getOrCreateSubquery(alias: string): DataSourceNode;
    /**
     * Creates a process node (deprecated - kept for backward compatibility)
     * Note: Process nodes are no longer used in data flow diagrams
     * as we focus only on data sources, joins, and unions
     */
    createProcessNode(type: string, context: string): ProcessNode;
    /**
     * Creates a JOIN operation node
     */
    createJoinNode(joinId: string, joinType: string): OperationNode;
    /**
     * Creates a set operation node (UNION, EXCEPT, etc.)
     */
    createSetOperationNode(operationId: string, operation: string): OperationNode;
    /**
     * Creates an output node
     */
    createOutputNode(context?: string): OutputNode;
}
