#!/usr/bin/env node
// Run all Postgres-compatible migrations in order.
// Each migration is idempotent (safe to re-run).
// Used by CI/CD pipeline during deploy to ensure schema is up to date.
//
// Usage: cd backend && node migrations/run-all.js

const { execSync } = require('child_process');
const path = require('path');
const fs = require('fs');

const MIGRATIONS_DIR = __dirname;

// Only run migrations that use the Postgres pool (not legacy SQLite ones).
// Add new migrations to this list as they're created.
const POSTGRES_MIGRATIONS = [
    'add_decom_workflow_type.js',
    'add_fp_submissions_dismissed.js',
    'add_fp_submissions_requeued_at.js',
    'add_vcl_reporting_columns.js',
    'add_vcl_vertical_metadata.js',
    'add_vcl_multi_vertical.js',
    'add_compliance_item_history.js',
    'add_jira_sync_columns_pg.js',
    'add_flexible_jira_ticket_creation.js',
    'add_multi_item_jira_ticket.js',
    'drop_jira_status_check_constraint.js',
    'add_compliance_history_metric_id.js',
];

async function runAll() {
    console.log(`[Migrations] Running ${POSTGRES_MIGRATIONS.length} Postgres migration(s)...`);
    let succeeded = 0;
    let failed = 0;

    for (const file of POSTGRES_MIGRATIONS) {
        const fullPath = path.join(MIGRATIONS_DIR, file);
        if (!fs.existsSync(fullPath)) {
            console.error(`  [FAIL] ${file}: file not found`);
            failed++;
            continue;
        }

        try {
            console.log(`  [run]  ${file}`);
            execSync(`node ${fullPath}`, {
                cwd: path.join(MIGRATIONS_DIR, '..'),
                stdio: 'inherit',
                timeout: 30000,
            });
            succeeded++;
        } catch (err) {
            console.error(`  [FAIL] ${file}: exit code ${err.status}`);
            failed++;
        }
    }

    console.log(`[Migrations] Done: ${succeeded} applied, ${failed} failed`);
    if (failed > 0) process.exit(1);
}

runAll();
