import { MigrationInterface, QueryRunner } from "typeorm"

export class ResetProjectPartyTypeEnum1764749999999 implements MigrationInterface {
  public async up(queryRunner: QueryRunner): Promise<void> {
    // 1️⃣ Change column to TEXT temporarily (drops enum dependency)
    await queryRunner.query(`
      ALTER TABLE "project_party_assignments"
      ALTER COLUMN "party_type"
      TYPE TEXT;
    `)

    // 2️⃣ Drop enum if exists
    await queryRunner.query(`
      DO $$
      BEGIN
        IF EXISTS (
          SELECT 1 FROM pg_type WHERE typname = 'project_party_assignments_party_type_enum'
        ) THEN
          DROP TYPE "project_party_assignments_party_type_enum";
        END IF;
      END$$;
    `)

    // 3️⃣ Create NEW enum with uppercase values
    await queryRunner.query(`
      CREATE TYPE "project_party_assignments_party_type_enum"
      AS ENUM ('CONSULTANT', 'CONTRACTOR', 'VENDOR');
    `)

    // 4️⃣ Assign column back to new enum type
    await queryRunner.query(`
      ALTER TABLE "project_party_assignments"
      ALTER COLUMN "party_type"
      TYPE "project_party_assignments_party_type_enum"
      USING "party_type"::text::"project_party_assignments_party_type_enum";
    `)
  }

  public async down(queryRunner: QueryRunner): Promise<void> {
    // Reverse (text → lowercase enum → restore)
    await queryRunner.query(`
      ALTER TABLE "project_party_assignments"
      ALTER COLUMN "party_type"
      TYPE TEXT;
    `)

    await queryRunner.query(`
      DROP TYPE IF EXISTS "project_party_assignments_party_type_enum";
    `)

    await queryRunner.query(`
      CREATE TYPE "project_party_assignments_party_type_enum"
      AS ENUM ('vendor', 'contractor', 'consultant');
    `)

    await queryRunner.query(`
      ALTER TABLE "project_party_assignments"
      ALTER COLUMN "party_type"
      TYPE "project_party_assignments_party_type_enum"
      USING LOWER("party_type")::text::"project_party_assignments_party_type_enum";
    `)
  }
}
