import { MigrationInterface, QueryRunner } from "typeorm"

export class CustomerEpisodeLog1761904395351 implements MigrationInterface {
  name = "CustomerEpisodeLog1761904395351"

  public async up(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.query(
      `CREATE TABLE "episode_logs" ("id" SERIAL NOT NULL, "episode_id" integer NOT NULL, "log_number" integer NOT NULL, "reference_number" integer, "prn_number" integer, "hospital_id" integer, "log_date" TIMESTAMP NOT NULL, "log_expiration" TIMESTAMP NOT NULL, "status" character varying, "log_document" character varying, "created_at" TIMESTAMP NOT NULL DEFAULT NOW(), "updated_at" TIMESTAMP NOT NULL DEFAULT NOW(), "deleted_at" TIMESTAMP, CONSTRAINT "PK_1a34e8faa02462be3f15f5a4e63" PRIMARY KEY ("id"))`,
    )
    await queryRunner.query(
      `CREATE TABLE "customer_episodes" ("id" SERIAL NOT NULL, "customer_id" integer NOT NULL, "episode_number" integer NOT NULL, "start_date" TIMESTAMP, "end_date" TIMESTAMP, "status" character varying, "created_at" TIMESTAMP NOT NULL DEFAULT NOW(), "updated_at" TIMESTAMP NOT NULL DEFAULT NOW(), "deleted_at" TIMESTAMP, CONSTRAINT "PK_9459359687b5796e590c664ab5f" PRIMARY KEY ("id"))`,
    )
    await queryRunner.query(
      `ALTER TABLE "customers" DROP COLUMN "reference_number"`,
    )
    await queryRunner.query(`ALTER TABLE "customers" DROP COLUMN "episode"`)
    await queryRunner.query(
      `ALTER TABLE "customers" DROP COLUMN "log_issue_at"`,
    )
    await queryRunner.query(
      `ALTER TABLE "customers" DROP COLUMN "log_expire_at"`,
    )
    await queryRunner.query(
      `ALTER TABLE "episode_logs" ADD CONSTRAINT "FK_46a2699229f7c8dc168126b9ce9" FOREIGN KEY ("episode_id") REFERENCES "customer_episodes"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`,
    )
    await queryRunner.query(
      `ALTER TABLE "episode_logs" ADD CONSTRAINT "FK_397db457c900ad3cb8337d53d31" FOREIGN KEY ("hospital_id") REFERENCES "hospitals"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`,
    )
    await queryRunner.query(
      `ALTER TABLE "customer_episodes" ADD CONSTRAINT "FK_2c96ab13673e8423d729e9e57b2" FOREIGN KEY ("customer_id") REFERENCES "customers"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`,
    )
  }

  public async down(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.query(
      `ALTER TABLE "customer_episodes" DROP CONSTRAINT "FK_2c96ab13673e8423d729e9e57b2"`,
    )
    await queryRunner.query(
      `ALTER TABLE "episode_logs" DROP CONSTRAINT "FK_397db457c900ad3cb8337d53d31"`,
    )
    await queryRunner.query(
      `ALTER TABLE "episode_logs" DROP CONSTRAINT "FK_46a2699229f7c8dc168126b9ce9"`,
    )
    await queryRunner.query(
      `ALTER TABLE "customers" ADD "log_expire_at" character varying`,
    )
    await queryRunner.query(
      `ALTER TABLE "customers" ADD "log_issue_at" character varying`,
    )
    await queryRunner.query(
      `ALTER TABLE "customers" ADD "episode" character varying`,
    )
    await queryRunner.query(
      `ALTER TABLE "customers" ADD "reference_number" character varying`,
    )
    await queryRunner.query(`DROP TABLE "customer_episodes"`)
    await queryRunner.query(`DROP TABLE "episode_logs"`)
  }
}
