import { MigrationInterface, QueryRunner } from "typeorm";

export class MigrateKeywordsToTranslations1767091091327 implements MigrationInterface {
    name = 'MigrateKeywordsToTranslations1767091091327'

    public async up(queryRunner: QueryRunner): Promise<void> {
        // Insert English translations for all keywords that don't have a translation yet
        // This will copy the keyword text from keywords table to keyword_translations table

        // First, let's check how many keywords need migration
        const countResult = await queryRunner.query(`
            SELECT COUNT(*) as count
            FROM keywords k
            WHERE NOT EXISTS (
                SELECT 1 
                FROM keyword_translations kt 
                WHERE kt.keyword_id = k.id 
                AND kt.language_code = 'en'
                AND kt.deleted_at IS NULL
            )
        `);

        const keywordsToMigrate = parseInt(countResult[0]?.count || '0');
        console.log(`📊 Found ${keywordsToMigrate} keywords to migrate to translations...`);

        if (keywordsToMigrate > 0) {
            await queryRunner.query(`
                INSERT INTO keyword_translations (id, keyword_id, language_code, keyword, created_at, updated_at)
                SELECT 
                    uuid_generate_v4() as id,
                    k.id as keyword_id,
                    'en' as language_code,
                    COALESCE(NULLIF(TRIM(k.keyword), ''), 'Untitled Keyword') as keyword,
                    COALESCE(k.created_at, NOW()) as created_at,
                    NOW() as updated_at
                FROM keywords k
                WHERE NOT EXISTS (
                    SELECT 1 
                    FROM keyword_translations kt 
                    WHERE kt.keyword_id = k.id 
                    AND kt.language_code = 'en'
                    AND kt.deleted_at IS NULL
                )
            `);

            // Verify the migration
            const result = await queryRunner.query(`
                SELECT COUNT(*) as count 
                FROM keyword_translations 
                WHERE language_code = 'en'
            `);

            console.log(`✅ Migration completed successfully!`);
            console.log(`   - Keywords migrated: ${keywordsToMigrate}`);
            console.log(`   - Total English translations: ${result[0]?.count || 0}`);
        } else {
            console.log(`ℹ️  No keywords need migration. All keywords already have English translations.`);
        }
    }

    public async down(queryRunner: QueryRunner): Promise<void> {
        // Remove all English translations that were created by this migration
        // Note: This will only remove translations if they match the original keyword data
        await queryRunner.query(`
            DELETE FROM keyword_translations 
            WHERE language_code = 'en'
            AND EXISTS (
                SELECT 1 
                FROM keywords k 
                WHERE k.id = keyword_translations.keyword_id
                AND k.keyword = keyword_translations.keyword
            )
        `);

        console.log(`✅ Rollback completed: English keyword translations removed.`);
    }
}

