import { MigrationInterface, QueryRunner } from "typeorm"

export class AlterRoleEntityAddManyToManyRelationship1744626991305 implements MigrationInterface {
  name = "AlterRoleEntityAddManyToManyRelationship1744626991305"

  public async up(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.query(
      `ALTER TABLE "roles" DROP CONSTRAINT "FK_2bbb1454cd05d635b3f50de3d37"`,
    )
    await queryRunner.query(
      `ALTER TABLE "roles" DROP CONSTRAINT "FK_f9842b21d158bb60985c03a9813"`,
    )
    await queryRunner.query(
      `CREATE TABLE "role_departments" ("role_id" integer NOT NULL, "department_id" integer NOT NULL, CONSTRAINT "PK_73dd682733dfc93d8e7e3084751" PRIMARY KEY ("role_id", "department_id"))`,
    )
    await queryRunner.query(
      `CREATE INDEX "IDX_9f1cd5e8eb8f95cada243c3ee9" ON "role_departments" ("role_id") `,
    )
    await queryRunner.query(
      `CREATE INDEX "IDX_c66e6e61361a25395dca8c3d17" ON "role_departments" ("department_id") `,
    )
    await queryRunner.query(
      `CREATE TABLE "role_business_verticals" ("role_id" integer NOT NULL, "business_vertical_id" integer NOT NULL, CONSTRAINT "PK_a0c14d4183102b8c38c03d11943" PRIMARY KEY ("role_id", "business_vertical_id"))`,
    )
    await queryRunner.query(
      `CREATE INDEX "IDX_21334587f76c06b93228697a45" ON "role_business_verticals" ("role_id") `,
    )
    await queryRunner.query(
      `CREATE INDEX "IDX_fba3c40db28eada06252c9e9fb" ON "role_business_verticals" ("business_vertical_id") `,
    )
    await queryRunner.query(`ALTER TABLE "roles" DROP COLUMN "department_id"`)
    await queryRunner.query(
      `ALTER TABLE "roles" DROP COLUMN "business_vertical_id"`,
    )
    await queryRunner.query(
      `ALTER TABLE "role_departments" ADD CONSTRAINT "FK_9f1cd5e8eb8f95cada243c3ee9b" FOREIGN KEY ("role_id") REFERENCES "roles"("id") ON DELETE CASCADE ON UPDATE CASCADE`,
    )
    await queryRunner.query(
      `ALTER TABLE "role_departments" ADD CONSTRAINT "FK_c66e6e61361a25395dca8c3d173" FOREIGN KEY ("department_id") REFERENCES "departments"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`,
    )
    await queryRunner.query(
      `ALTER TABLE "role_business_verticals" ADD CONSTRAINT "FK_21334587f76c06b93228697a452" FOREIGN KEY ("role_id") REFERENCES "roles"("id") ON DELETE CASCADE ON UPDATE CASCADE`,
    )
    await queryRunner.query(
      `ALTER TABLE "role_business_verticals" ADD CONSTRAINT "FK_fba3c40db28eada06252c9e9fb9" FOREIGN KEY ("business_vertical_id") REFERENCES "business_verticals"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`,
    )
  }

  public async down(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.query(
      `ALTER TABLE "role_business_verticals" DROP CONSTRAINT "FK_fba3c40db28eada06252c9e9fb9"`,
    )
    await queryRunner.query(
      `ALTER TABLE "role_business_verticals" DROP CONSTRAINT "FK_21334587f76c06b93228697a452"`,
    )
    await queryRunner.query(
      `ALTER TABLE "role_departments" DROP CONSTRAINT "FK_c66e6e61361a25395dca8c3d173"`,
    )
    await queryRunner.query(
      `ALTER TABLE "role_departments" DROP CONSTRAINT "FK_9f1cd5e8eb8f95cada243c3ee9b"`,
    )
    await queryRunner.query(
      `ALTER TABLE "roles" ADD "business_vertical_id" integer`,
    )
    await queryRunner.query(`ALTER TABLE "roles" ADD "department_id" integer`)
    await queryRunner.query(
      `DROP INDEX "public"."IDX_fba3c40db28eada06252c9e9fb"`,
    )
    await queryRunner.query(
      `DROP INDEX "public"."IDX_21334587f76c06b93228697a45"`,
    )
    await queryRunner.query(`DROP TABLE "role_business_verticals"`)
    await queryRunner.query(
      `DROP INDEX "public"."IDX_c66e6e61361a25395dca8c3d17"`,
    )
    await queryRunner.query(
      `DROP INDEX "public"."IDX_9f1cd5e8eb8f95cada243c3ee9"`,
    )
    await queryRunner.query(`DROP TABLE "role_departments"`)
    await queryRunner.query(
      `ALTER TABLE "roles" ADD CONSTRAINT "FK_f9842b21d158bb60985c03a9813" FOREIGN KEY ("department_id") REFERENCES "departments"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`,
    )
    await queryRunner.query(
      `ALTER TABLE "roles" ADD CONSTRAINT "FK_2bbb1454cd05d635b3f50de3d37" FOREIGN KEY ("business_vertical_id") REFERENCES "business_verticals"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`,
    )
  }
}
