import { MigrationInterface, QueryRunner } from "typeorm"

export class AddSubDepartment1774350666220 implements MigrationInterface {
  name = "AddSubDepartment1774350666220"

  public async up(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.query(`ALTER TABLE "departments" ADD "parent_id" integer`)
    await queryRunner.query(
      `ALTER TABLE "employees" ADD "sub_department_id" integer`,
    )
    await queryRunner.query(
      `ALTER TABLE "business_kpis_ratings" ADD "sub_department_id" integer`,
    )
    await queryRunner.query(
      `CREATE INDEX "IDX_700b0b13f494cb37b6ca929e79" ON "departments" ("parent_id") `,
    )
    await queryRunner.query(
      `CREATE UNIQUE INDEX "IDX_7d365aceeed1e350b3477fc11e" ON "departments" ("company_id", "name", "parent_id") `,
    )
    await queryRunner.query(
      `ALTER TABLE "departments" ADD CONSTRAINT "FK_700b0b13f494cb37b6ca929e79b" FOREIGN KEY ("parent_id") REFERENCES "departments"("id") ON DELETE SET NULL ON UPDATE NO ACTION`,
    )
    await queryRunner.query(
      `ALTER TABLE "employees" ADD CONSTRAINT "FK_388bfa52d4a4115e86567bbe166" FOREIGN KEY ("sub_department_id") REFERENCES "departments"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`,
    )
    await queryRunner.query(
      `ALTER TABLE "business_kpis_ratings" ADD CONSTRAINT "FK_0ee4f39a457b87dcfc00d0abf13" FOREIGN KEY ("sub_department_id") REFERENCES "departments"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`,
    )
  }

  public async down(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.query(
      `ALTER TABLE "business_kpis_ratings" DROP CONSTRAINT "FK_0ee4f39a457b87dcfc00d0abf13"`,
    )
    await queryRunner.query(
      `ALTER TABLE "employees" DROP CONSTRAINT "FK_388bfa52d4a4115e86567bbe166"`,
    )
    await queryRunner.query(
      `ALTER TABLE "departments" DROP CONSTRAINT "FK_700b0b13f494cb37b6ca929e79b"`,
    )
    await queryRunner.query(
      `ALTER TABLE "business_kpis_ratings" DROP COLUMN "sub_department_id"`,
    )
    await queryRunner.query(
      `ALTER TABLE "employees" DROP COLUMN "sub_department_id"`,
    )
    await queryRunner.query(`ALTER TABLE "departments" DROP COLUMN "parent_id"`)
  }
}
