import { MigrationInterface, QueryRunner } from "typeorm"

export class AddTeamMemberEntity1745304641783 implements MigrationInterface {
  name = "AddTeamMemberEntity1745304641783"

  public async up(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.query(
      `ALTER TABLE "departments" DROP CONSTRAINT "FK_305e5481a26628a33583aa9ce39"`,
    )
    await queryRunner.query(
      `CREATE TABLE "id_proofs" ("id" SERIAL NOT NULL, "team_member_id" integer NOT NULL, "document_files" character varying, "deleted_at" TIMESTAMP, "created_at" TIMESTAMP NOT NULL DEFAULT NOW(), "updated_at" TIMESTAMP NOT NULL DEFAULT NOW(), CONSTRAINT "PK_44495e0ba01004c6c73c15e9b8f" PRIMARY KEY ("id"))`,
    )
    await queryRunner.query(
      `CREATE TABLE "addresses" ("id" SERIAL NOT NULL, "city_id" integer NOT NULL, "team_member_id" integer NOT NULL, "address_line_1" character varying NOT NULL, "address_line_2" character varying, "country" character varying NOT NULL, "state" character varying NOT NULL, "zipcode" character varying NOT NULL, "address_type" character varying NOT NULL, "deleted_at" TIMESTAMP, "created_at" TIMESTAMP NOT NULL DEFAULT NOW(), "updated_at" TIMESTAMP NOT NULL DEFAULT NOW(), CONSTRAINT "PK_745d8f43d3af10ab8247465e450" PRIMARY KEY ("id"))`,
    )
    await queryRunner.query(
      `ALTER TABLE "departments" DROP COLUMN "team_member_id"`,
    )
    await queryRunner.query(
      `ALTER TABLE "team_members" DROP COLUMN "date_of_birth"`,
    )
    await queryRunner.query(
      `ALTER TABLE "team_members" DROP COLUMN "address_line_1"`,
    )
    await queryRunner.query(
      `ALTER TABLE "team_members" DROP COLUMN "address_line_2"`,
    )
    await queryRunner.query(`ALTER TABLE "team_members" DROP COLUMN "country"`)
    await queryRunner.query(`ALTER TABLE "team_members" DROP COLUMN "state"`)
    await queryRunner.query(`ALTER TABLE "team_members" DROP COLUMN "city"`)
    await queryRunner.query(`ALTER TABLE "team_members" DROP COLUMN "zipcode"`)
    await queryRunner.query(
      `ALTER TABLE "team_members" DROP COLUMN "emergency_contact_phone"`,
    )
    await queryRunner.query(`ALTER TABLE "team_members" DROP COLUMN "id_proof"`)
    await queryRunner.query(
      `ALTER TABLE "team_members" ADD "department_id" integer`,
    )
    await queryRunner.query(
      `ALTER TABLE "team_members" ADD "reporting_to_id" integer`,
    )
    await queryRunner.query(
      `ALTER TABLE "team_members" ADD "country_code" character varying(5)`,
    )
    await queryRunner.query(`ALTER TABLE "team_members" ADD "dob" date`)
    await queryRunner.query(
      `ALTER TABLE "team_members" ADD "emergency_contact_code" character varying(5)`,
    )
    await queryRunner.query(
      `ALTER TABLE "team_members" ADD "emergency_contact_number" character varying(15)`,
    )
    await queryRunner.query(
      `ALTER TABLE "id_proofs" ADD CONSTRAINT "FK_4259881c27650007ba176faece5" FOREIGN KEY ("team_member_id") REFERENCES "team_members"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
    )
    await queryRunner.query(
      `ALTER TABLE "team_members" ADD CONSTRAINT "FK_1ff643d76ff2783edec81be2945" FOREIGN KEY ("department_id") REFERENCES "departments"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
    )
    await queryRunner.query(
      `ALTER TABLE "team_members" ADD CONSTRAINT "FK_eb44a0991d61d745f910dc7f386" FOREIGN KEY ("reporting_to_id") REFERENCES "team_members"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
    )
    await queryRunner.query(
      `ALTER TABLE "addresses" ADD CONSTRAINT "FK_63dbbe54184e1ffed53d29cf01a" FOREIGN KEY ("team_member_id") REFERENCES "team_members"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
    )
    await queryRunner.query(
      `ALTER TABLE "addresses" ADD CONSTRAINT "FK_baebeb388634106e4cbb46192b9" FOREIGN KEY ("city_id") REFERENCES "cities"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`,
    )
  }

  public async down(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.query(
      `ALTER TABLE "addresses" DROP CONSTRAINT "FK_baebeb388634106e4cbb46192b9"`,
    )
    await queryRunner.query(
      `ALTER TABLE "addresses" DROP CONSTRAINT "FK_63dbbe54184e1ffed53d29cf01a"`,
    )
    await queryRunner.query(
      `ALTER TABLE "team_members" DROP CONSTRAINT "FK_eb44a0991d61d745f910dc7f386"`,
    )
    await queryRunner.query(
      `ALTER TABLE "team_members" DROP CONSTRAINT "FK_1ff643d76ff2783edec81be2945"`,
    )
    await queryRunner.query(
      `ALTER TABLE "id_proofs" DROP CONSTRAINT "FK_4259881c27650007ba176faece5"`,
    )
    await queryRunner.query(
      `ALTER TABLE "team_members" DROP COLUMN "emergency_contact_number"`,
    )
    await queryRunner.query(
      `ALTER TABLE "team_members" DROP COLUMN "emergency_contact_code"`,
    )
    await queryRunner.query(`ALTER TABLE "team_members" DROP COLUMN "dob"`)
    await queryRunner.query(
      `ALTER TABLE "team_members" DROP COLUMN "country_code"`,
    )
    await queryRunner.query(
      `ALTER TABLE "team_members" DROP COLUMN "reporting_to_id"`,
    )
    await queryRunner.query(
      `ALTER TABLE "team_members" DROP COLUMN "department_id"`,
    )
    await queryRunner.query(
      `ALTER TABLE "team_members" ADD "id_proof" character varying`,
    )
    await queryRunner.query(
      `ALTER TABLE "team_members" ADD "emergency_contact_phone" character varying(15) NOT NULL`,
    )
    await queryRunner.query(
      `ALTER TABLE "team_members" ADD "zipcode" character varying`,
    )
    await queryRunner.query(
      `ALTER TABLE "team_members" ADD "city" character varying`,
    )
    await queryRunner.query(
      `ALTER TABLE "team_members" ADD "state" character varying`,
    )
    await queryRunner.query(
      `ALTER TABLE "team_members" ADD "country" character varying`,
    )
    await queryRunner.query(
      `ALTER TABLE "team_members" ADD "address_line_2" character varying`,
    )
    await queryRunner.query(
      `ALTER TABLE "team_members" ADD "address_line_1" character varying`,
    )
    await queryRunner.query(
      `ALTER TABLE "team_members" ADD "date_of_birth" date`,
    )
    await queryRunner.query(
      `ALTER TABLE "departments" ADD "team_member_id" integer`,
    )
    await queryRunner.query(`DROP TABLE "addresses"`)
    await queryRunner.query(`DROP TABLE "id_proofs"`)
    await queryRunner.query(
      `ALTER TABLE "departments" ADD CONSTRAINT "FK_305e5481a26628a33583aa9ce39" FOREIGN KEY ("team_member_id") REFERENCES "team_members"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
    )
  }
}
