import { MigrationInterface, QueryRunner } from "typeorm"

export class CreatePayrollComponentEnums1764574028336 implements MigrationInterface {
  name = "CreatePayrollComponentEnums1764574028336"

  public async up(queryRunner: QueryRunner): Promise<void> {
    // Create component_type enum if it doesn't exist
    await queryRunner.query(
      `DO $$ BEGIN
        CREATE TYPE "public"."payroll_entry_components_component_type_enum" AS ENUM('earning', 'deduction');
      EXCEPTION
        WHEN duplicate_object THEN null;
      END $$;`,
    )

    // Create calculation_type enum if it doesn't exist
    await queryRunner.query(
      `DO $$ BEGIN
        CREATE TYPE "public"."payroll_entry_components_calculation_type_enum" AS ENUM('fixed', 'percentage');
      EXCEPTION
        WHEN duplicate_object THEN null;
      END $$;`,
    )

    // Create payroll_cycle_status enum if it doesn't exist
    await queryRunner.query(
      `DO $$ BEGIN
        CREATE TYPE "public"."payroll_cycles_status_enum" AS ENUM('0', '1', '2');
      EXCEPTION
        WHEN duplicate_object THEN null;
      END $$;`,
    )
  }

  public async down(queryRunner: QueryRunner): Promise<void> {
    // Drop enums in reverse order
    await queryRunner.query(`DROP TYPE "public"."payroll_cycles_status_enum"`)
    await queryRunner.query(
      `DROP TYPE "public"."payroll_entry_components_calculation_type_enum"`,
    )
    await queryRunner.query(
      `DROP TYPE "public"."payroll_entry_components_component_type_enum"`,
    )
  }
}
