import { MigrationInterface, QueryRunner } from "typeorm"

export class CreatePartyPaymentsTable1769505035535 implements MigrationInterface {
  name = "CreatePartyPaymentsTable1769505035535"

  public async up(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.query(
      `CREATE TABLE "party_payments" ("created_by" integer, "updated_by" integer, "deleted_by" integer, "created_at" TIMESTAMP NOT NULL DEFAULT NOW(), "updated_at" TIMESTAMP NOT NULL DEFAULT NOW(), "deleted_at" TIMESTAMP, "id" SERIAL NOT NULL, "party_id" integer NOT NULL, "party_type" character varying(50) NOT NULL, "payment_type" character varying(50) NOT NULL, "amount" numeric(15,2) NOT NULL, "start_date" date NOT NULL, "end_date" date, "company_id" integer NOT NULL, "project_id" integer, "notes" character varying(255), "paid_date" date, CONSTRAINT "PK_87a4e6817f01e358b8e6c033b5a" PRIMARY KEY ("id"))`,
    )
    await queryRunner.query(
      `CREATE INDEX "idx_party_payment_project" ON "party_payments" ("project_id") `,
    )
    await queryRunner.query(
      `CREATE INDEX "idx_party_payment_company" ON "party_payments" ("company_id") `,
    )
    await queryRunner.query(
      `CREATE UNIQUE INDEX "idx_party_payment_unique" ON "party_payments" ("party_id", "party_type") `,
    )
    await queryRunner.query(
      `ALTER TABLE "party_payments" ADD CONSTRAINT "FK_9314faf22e095009a9440fd1490" FOREIGN KEY ("company_id") REFERENCES "companies"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`,
    )
    await queryRunner.query(
      `ALTER TABLE "party_payments" ADD CONSTRAINT "FK_746feae04d8bc15aeca731aadba" FOREIGN KEY ("project_id") REFERENCES "projects"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`,
    )
  }

  public async down(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.query(
      `ALTER TABLE "party_payments" DROP CONSTRAINT "FK_746feae04d8bc15aeca731aadba"`,
    )
    await queryRunner.query(
      `ALTER TABLE "party_payments" DROP CONSTRAINT "FK_9314faf22e095009a9440fd1490"`,
    )
    await queryRunner.query(`DROP INDEX "public"."idx_party_payment_unique"`)
    await queryRunner.query(`DROP INDEX "public"."idx_party_payment_company"`)
    await queryRunner.query(`DROP INDEX "public"."idx_party_payment_project"`)
    await queryRunner.query(`DROP TABLE "party_payments"`)
  }
}
