import type { SQLiteManager } from '../sqlite-manager.js';

/**
 * Migration to remove 'planning' status from the agile module
 * 
 * This migration:
 * 1. Updates all stories with 'planning' status to 'backlog'
 * 2. Updates all sprints with 'planning' status to 'active'
 * 3. Updates all epics with 'planning' status to 'planned'
 */
export async function removePlanningStatus(db: SQLiteManager): Promise<void> {
  try {
    // Start transaction
    await db.run('BEGIN TRANSACTION');

    // Update stories with planning status to backlog
    const storiesResult = await db.run(
      `UPDATE agile_stories 
       SET status = 'backlog', 
           updated_at = ? 
       WHERE status = 'planning'`,
      [Date.now()]
    );

    if (storiesResult.success) {
      console.log(`Updated ${storiesResult.data?.changes || 0} stories from 'planning' to 'backlog' status`);
    }

    // Update sprints with planning status to active
    const sprintsResult = await db.run(
      `UPDATE agile_sprints 
       SET status = 'active', 
           updated_at = ? 
       WHERE status = 'planning'`,
      [Date.now()]
    );

    if (sprintsResult.success) {
      console.log(`Updated ${sprintsResult.data?.changes || 0} sprints from 'planning' to 'active' status`);
    }

    // Update epics with planning status to planned
    const epicsResult = await db.run(
      `UPDATE agile_epics 
       SET status = 'planned', 
           updated_at = ? 
       WHERE status = 'planning'`,
      [Date.now()]
    );

    if (epicsResult.success) {
      console.log(`Updated ${epicsResult.data?.changes || 0} epics from 'planning' to 'planned' status`);
    }

    // Update releases with planning status to in_progress
    const releasesResult = await db.run(
      `UPDATE roadmap_releases 
       SET status = 'in_progress', 
           updated_at = ? 
       WHERE status = 'planning'`,
      [Date.now()]
    );

    if (releasesResult.success) {
      console.log(`Updated ${releasesResult.data?.changes || 0} releases from 'planning' to 'in_progress' status`);
    }

    // Commit transaction
    await db.run('COMMIT');
    console.log('Successfully removed planning status from all tables');

  } catch (error) {
    // Rollback on error
    await db.run('ROLLBACK');
    console.error('Failed to remove planning status:', error);
    throw error;
  }
}

/**
 * Run the migration
 */
export async function up(db: SQLiteManager): Promise<void> {
  await removePlanningStatus(db);
}

/**
 * Rollback the migration (not recommended)
 * This would require adding 'planning' status back to the codebase
 */
export async function down(db: SQLiteManager): Promise<void> {
  console.warn('Rolling back planning status removal is not recommended');
  console.warn('This would require adding planning status back to the codebase');
}