import { MigrationInterface, QueryRunner } from "typeorm"

export class AddDepartmentAndTeamMember1742808240254 implements MigrationInterface {
  name = "AddDepartmentAndTeamMember1742808240254"

  public async up(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.query(
      `CREATE TABLE "departments" ("id" SERIAL NOT NULL, "name" character varying NOT NULL, "description" text, "team_member_id" integer NOT NULL, "deleted_at" TIMESTAMP, "created_at" TIMESTAMP DEFAULT NOW(), "updated_at" TIMESTAMP DEFAULT NOW(), CONSTRAINT "PK_839517a681a86bb84cbcc6a1e9d" PRIMARY KEY ("id"))`,
    )
    await queryRunner.query(
      `CREATE TYPE "public"."team_members_employment_type_enum" AS ENUM('on-roll', 'contract')`,
    )
    await queryRunner.query(
      `CREATE TYPE "public"."team_members_status_enum" AS ENUM('active', 'inactive')`,
    )
    await queryRunner.query(
      `CREATE TABLE "team_members" ("id" SERIAL NOT NULL, "profile_photo" character varying, "first_name" character varying NOT NULL, "last_name" character varying NOT NULL, "email" character varying NOT NULL, "phone_number" character varying(10) NOT NULL, "phone_code" character varying(5) NOT NULL, "date_of_birth" date, "gender" character varying, "address_line_1" character varying, "address_line_2" character varying, "country" character varying, "state" character varying, "city" character varying, "zipcode" character varying, "emergency_contact_name" character varying NOT NULL, "emergency_contact_phone_code" character varying(5) NOT NULL, "emergency_contact_phone" character varying(10) NOT NULL, "joining_date" date NOT NULL, "employment_type" "public"."team_members_employment_type_enum" NOT NULL DEFAULT 'on-roll', "role_id" integer NOT NULL, "id_proof" character varying, "status" "public"."team_members_status_enum" NOT NULL DEFAULT 'active', "deleted_at" TIMESTAMP, "created_at" TIMESTAMP NOT NULL DEFAULT NOW(), "updated_at" TIMESTAMP NOT NULL DEFAULT NOW(), CONSTRAINT "UQ_a88b84bdd6391e3d877a59fbb70" UNIQUE ("email"), CONSTRAINT "PK_ca3eae89dcf20c9fd95bf7460aa" PRIMARY KEY ("id"))`,
    )
    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`,
    )
    await queryRunner.query(
      `ALTER TABLE "team_members" ADD CONSTRAINT "FK_7a4dbecafed7033ca58a453a42e" FOREIGN KEY ("role_id") REFERENCES "roles"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
    )
  }

  public async down(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.query(
      `ALTER TABLE "team_members" DROP CONSTRAINT "FK_7a4dbecafed7033ca58a453a42e"`,
    )
    await queryRunner.query(
      `ALTER TABLE "departments" DROP CONSTRAINT "FK_305e5481a26628a33583aa9ce39"`,
    )
    await queryRunner.query(`DROP TABLE "team_members"`)
    await queryRunner.query(`DROP TYPE "public"."team_members_status_enum"`)
    await queryRunner.query(
      `DROP TYPE "public"."team_members_employment_type_enum"`,
    )
    await queryRunner.query(`DROP TABLE "departments"`)
  }
}
