import { MigrationInterface, QueryRunner } from "typeorm"

export class AddAddOnsEntity1747743588632 implements MigrationInterface {
  name = "AddAddOnsEntity1747743588632"

  public async up(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.query(
      `CREATE TABLE "add_ons" ("id" SERIAL NOT NULL, "name" character varying NOT NULL, "description" character varying, "created_at" TIMESTAMP DEFAULT NOW(), "updated_at" TIMESTAMP DEFAULT NOW(), "deleted_at" TIMESTAMP, CONSTRAINT "PK_16b0b20fb9aec455ea78e6065cb" PRIMARY KEY ("id"))`,
    )
    await queryRunner.query(
      `CREATE TABLE "add_on_vehicle_models" ("add_on_id" integer NOT NULL, "vehicle_model_id" integer NOT NULL, CONSTRAINT "PK_84aa05550918703280c5cd4b044" PRIMARY KEY ("add_on_id", "vehicle_model_id"))`,
    )
    await queryRunner.query(
      `CREATE INDEX "IDX_e2e5913137978f80917296b8f2" ON "add_on_vehicle_models" ("add_on_id") `,
    )
    await queryRunner.query(
      `CREATE INDEX "IDX_42278b18cc7fab6cf401ea7d17" ON "add_on_vehicle_models" ("vehicle_model_id") `,
    )
    await queryRunner.query(
      `ALTER TABLE "add_on_vehicle_models" ADD CONSTRAINT "FK_e2e5913137978f80917296b8f28" FOREIGN KEY ("add_on_id") REFERENCES "add_ons"("id") ON DELETE CASCADE ON UPDATE CASCADE`,
    )
    await queryRunner.query(
      `ALTER TABLE "add_on_vehicle_models" ADD CONSTRAINT "FK_42278b18cc7fab6cf401ea7d17f" FOREIGN KEY ("vehicle_model_id") REFERENCES "vehicle_models"("id") ON DELETE CASCADE ON UPDATE CASCADE`,
    )
  }

  public async down(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.query(
      `ALTER TABLE "add_on_vehicle_models" DROP CONSTRAINT "FK_42278b18cc7fab6cf401ea7d17f"`,
    )
    await queryRunner.query(
      `ALTER TABLE "add_on_vehicle_models" DROP CONSTRAINT "FK_e2e5913137978f80917296b8f28"`,
    )
    await queryRunner.query(
      `DROP INDEX "public"."IDX_42278b18cc7fab6cf401ea7d17"`,
    )
    await queryRunner.query(
      `DROP INDEX "public"."IDX_e2e5913137978f80917296b8f2"`,
    )
    await queryRunner.query(`DROP TABLE "add_on_vehicle_models"`)
    await queryRunner.query(`DROP TABLE "add_ons"`)
  }
}
