import { DatabaseDialect } from './database-dialect';
export interface IColumnInfo {
    name: string;
    type: 'string' | 'number' | 'boolean' | 'date' | 'json' | 'bytes' | 'decimal' | 'bigint';
    isOptional: boolean;
    isArray: boolean;
    isId: boolean;
    isUnique: boolean;
    isList: boolean;
    relationName?: string;
    relationFromFields?: string[];
    relationToFields?: string[];
    default?: any;
}
export interface ITableSchema {
    tableName: string;
    modelName: string;
    columns: Map<string, IColumnInfo>;
    primaryKey: string[];
    uniqueConstraints: string[][];
    relations: Map<string, IRelationInfo>;
    indexes: IIndexInfo[];
}
export interface IRelationInfo {
    name: string;
    type: 'one-to-one' | 'one-to-many' | 'many-to-one' | 'many-to-many';
    model: string;
    fields: string[];
    references: string[];
    isOptional: boolean;
}
export interface IIndexInfo {
    name: string;
    fields: string[];
    isUnique: boolean;
    type?: string;
}
export interface IDatabaseSchema {
    tables: Map<string, ITableSchema>;
    enums: Map<string, string[]>;
    dialect: DatabaseDialect;
    version: string;
}
export declare class SchemaInspector {
    private static schemaCache;
    private static lastInspectionTime;
    private static readonly CACHE_DURATION;
    static inspectSchema(prismaClient: any): Promise<IDatabaseSchema>;
    static getTableSchema(prismaClient: any, modelName: string): Promise<ITableSchema | null>;
    private static extractSchemaFromClient;
    private static extractTableSchema;
    private static determineRelationType;
    private static mapPrismaTypeToColumnType;
    private static getTableName;
    private static getDMMF;
    private static detectDialect;
    private static getVersion;
    private static getClientId;
    static clearCache(): void;
    static getCachedSchema(prismaClient: any): IDatabaseSchema | null;
    private static extractSchemaFromClientFallback;
    private static extractModelNamesFromClient;
    private static detectDialectFallback;
}
