import { Migration } from './migration.interface';
import * as fs from 'fs';
import * as path from 'path';

const migrationsDir = path.join(__dirname, '../migrations');

const loadMigrations = (): Migration[] => {
	const migrations: Migration[] = [];
	const files = fs.readdirSync(migrationsDir);

	const migrationFiles = files.filter(file => 
		file.startsWith('migration_v') && 
		file.endsWith('.js') &&
		!file.endsWith('.d.ts')
	);

	migrationFiles.sort((a, b) => {
		const versionA = parseInt(a.match(/migration_v(\d+)/)?.[1] || '0', 10);
		const versionB = parseInt(b.match(/migration_v(\d+)/)?.[1] || '0', 10);
		return versionA - versionB;
	});

	for (const file of migrationFiles) {
		try {
			const filePath = path.join(migrationsDir, file);
			const migrationModule = require(filePath);
			const migrationExport = Object.keys(migrationModule).find(key => 
				key.startsWith('migration_v')
			);
			
			if (migrationExport && migrationModule[migrationExport]) {
				migrations.push(migrationModule[migrationExport]);
				console.log(`MigrationService: loadMigrations - loaded migration from ${file}`);
			}
		} catch (error) {
			console.error(`MigrationService: loadMigrations - failed to load migration from ${file}:`, error);
		}
	}

	return migrations;
};

export const migrations: Migration[] = loadMigrations();

