import { MigrationInterface, QueryRunner } from "typeorm"

export class AddEntityForLanguages1756380381744 implements MigrationInterface {
  name = "AddEntityForLanguages1756380381744"

  public async up(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.query(
      `CREATE TABLE "languages" ("id" SERIAL NOT NULL, "code" character varying NOT NULL, "name" character varying NOT NULL, "deleted_at" TIMESTAMP, "created_at" TIMESTAMP NOT NULL DEFAULT NOW(), "updated_at" TIMESTAMP NOT NULL DEFAULT NOW(), CONSTRAINT "UQ_7397752718d1c9eb873722ec9b2" UNIQUE ("code"), CONSTRAINT "PK_b517f827ca496b29f4d549c631d" PRIMARY KEY ("id"))`,
    )
    await queryRunner.query(
      `CREATE TABLE "team_members_languages" ("team_member_id" integer NOT NULL, "language_id" integer NOT NULL, CONSTRAINT "PK_b4ee7334afa6efa689107efd48f" PRIMARY KEY ("team_member_id", "language_id"))`,
    )
    await queryRunner.query(
      `CREATE INDEX "IDX_6b0862ddee504d726f4ba0ac60" ON "team_members_languages" ("team_member_id") `,
    )
    await queryRunner.query(
      `CREATE INDEX "IDX_735cbfc83e5aee02881659be93" ON "team_members_languages" ("language_id") `,
    )
    await queryRunner.query(
      `ALTER TABLE "notifications" ADD "is_read" boolean NOT NULL DEFAULT false`,
    )
    await queryRunner.query(
      `ALTER TABLE "team_members_languages" ADD CONSTRAINT "FK_6b0862ddee504d726f4ba0ac606" FOREIGN KEY ("team_member_id") REFERENCES "team_members"("id") ON DELETE CASCADE ON UPDATE CASCADE`,
    )
    await queryRunner.query(
      `ALTER TABLE "team_members_languages" ADD CONSTRAINT "FK_735cbfc83e5aee02881659be931" FOREIGN KEY ("language_id") REFERENCES "languages"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`,
    )
  }

  public async down(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.query(
      `ALTER TABLE "team_members_languages" DROP CONSTRAINT "FK_735cbfc83e5aee02881659be931"`,
    )
    await queryRunner.query(
      `ALTER TABLE "team_members_languages" DROP CONSTRAINT "FK_6b0862ddee504d726f4ba0ac606"`,
    )
    await queryRunner.query(`ALTER TABLE "notifications" DROP COLUMN "is_read"`)
    await queryRunner.query(
      `DROP INDEX "public"."IDX_735cbfc83e5aee02881659be93"`,
    )
    await queryRunner.query(
      `DROP INDEX "public"."IDX_6b0862ddee504d726f4ba0ac60"`,
    )
    await queryRunner.query(`DROP TABLE "team_members_languages"`)
    await queryRunner.query(`DROP TABLE "languages"`)
  }
}
