import { SurrealDBClient } from '../infrastructure/client';
import { MigrationRepository } from './migration-repository';
import { DependencyResolver } from './dependency-resolver';
import { type MigrationFile } from '../filesystem/migration-file-processor';
import { type ResolvedFilename } from '../filesystem/pattern-resolver';
import { Migration } from '../configuration/types';
import { ExecutorContext } from '@nx/devkit';
export interface MigrationServiceOptions {
    url: string;
    user: string;
    pass: string;
    namespace?: string;
    database?: string;
    envFile?: string;
    useTransactions?: boolean;
    initPath?: string;
    schemaPath?: string;
    force?: boolean;
    configPath?: string;
    debug?: boolean;
    dryRun?: boolean;
}
export interface MigrationExecutionContext {
    client: SurrealDBClient;
    repository: MigrationRepository;
    resolver: DependencyResolver;
    options: ResolvedMigrationOptions;
}
export interface ResolvedMigrationOptions {
    url: string;
    user: string;
    pass: string;
    namespace: string;
    database: string;
    useTransactions: boolean;
    initPath: string;
    schemaPath?: string;
    force: boolean;
    configPath?: string;
    debug?: boolean;
    dryRun: boolean;
}
export interface MigrationResult {
    success: boolean;
    filesProcessed: number;
    filesSkipped: number;
    executionTimeMs: number;
    results: MigrationFileResult[];
}
export interface MigrationFileResult {
    file: MigrationFile;
    success: boolean;
    executionTimeMs: number;
    error?: string;
    skipped?: boolean;
    skipReason?: string;
}
export declare class MigrationService {
    private projectContext?;
    private context;
    private options;
    private patternResolver;
    private debug;
    constructor(projectContext?: ExecutorContext);
    static findMatchingSubdirectory(basePath: string, pattern: string): Promise<string | null>;
    initialize(options: MigrationServiceOptions): Promise<void>;
    findPendingMigrations(targetModules?: string[], direction?: 'up' | 'down'): Promise<MigrationFile[]>;
    executeMigrations(targetModules?: string[], operation?: 'migrate' | 'rollback', targetFilenames?: string[]): Promise<MigrationResult>;
    validateRollback(targetModules?: string[]): Promise<{
        canRollback: boolean;
        blockedBy: string[];
        warnings: string[];
        migrationChecks: Array<{
            moduleId: string;
            hasAppliedMigrations: boolean;
            rollbackFilesAvailable: boolean;
            dependencyConflicts: string[];
        }>;
    }>;
    getMigrationStatus(targetModules?: string[]): Promise<{
        modules: Array<{
            moduleId: string;
            appliedMigrations: number;
            pendingMigrations: number;
            lastApplied?: Date;
            dependencies: string[];
            dependents: string[];
        }>;
        totalApplied: number;
        totalPending: number;
    }>;
    getFileStatus(resolvedFilenames: ResolvedFilename[]): Promise<Array<{
        filename: string;
        moduleId: string;
        number: string;
        name: string;
        direction: 'up' | 'down';
        status: 'applied' | 'pending' | 'unknown';
        appliedAt?: Date;
        checksum?: string;
        dependencies: string[];
        dependents: string[];
    }>>;
    private buildMigrationRecord;
    findLastMigrations(moduleIds: string[]): Promise<Migration[]>;
    close(): Promise<void>;
    resolveTargetModules(targetModules: string[]): string[];
    resolveTargetFilenames(filenamePatterns: string[], targetModules?: string[], direction?: 'up' | 'down'): Promise<ResolvedFilename[]>;
    resolveRollbackFilenames(filenamePatterns: string[], targetModules?: string[]): Promise<{
        resolved: ResolvedFilename[];
        warnings: string[];
    }>;
    findModuleMigrations(moduleId: string, direction: 'up' | 'down', basePath: string, includeContent?: boolean): Promise<MigrationFile[]>;
    private executeSingleMigration;
    private getModuleStatusCounts;
    private getAppliedMigrations;
    getConfig(): import("..").MigrationsConfig;
    getAllModules(): string[];
}
