import { MigrationInterface, QueryRunner } from 'typeorm';

export class CreateCampaignAiReports1789010000000 implements MigrationInterface {
  name = 'CreateCampaignAiReports1789010000000';

  public async up(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.query(
      `CREATE TABLE "campaign_ai_reports" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "report_number" character varying(50) NOT NULL, "response_json" jsonb, "created_at" TIMESTAMP(0) NOT NULL DEFAULT now(), "updated_at" TIMESTAMP(0) NOT NULL DEFAULT now(), "campaign_id" uuid NOT NULL, "campaign_influencer_id" uuid NOT NULL, CONSTRAINT "PK_campaign_ai_reports" PRIMARY KEY ("id"))`,
    );
    await queryRunner.query(
      `CREATE INDEX "IDX_campaign_ai_report_campaign" ON "campaign_ai_reports" ("campaign_id")`,
    );
    await queryRunner.query(
      `CREATE INDEX "IDX_campaign_ai_report_campaign_influencer" ON "campaign_ai_reports" ("campaign_influencer_id")`,
    );
    await queryRunner.query(
      `CREATE UNIQUE INDEX "UQ_campaign_ai_report_influencer_number" ON "campaign_ai_reports" ("campaign_influencer_id", "report_number")`,
    );
    await queryRunner.query(
      `ALTER TABLE "campaign_ai_reports" ADD CONSTRAINT "FK_campaign_ai_reports_campaign_id" FOREIGN KEY ("campaign_id") REFERENCES "campaigns"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
    );
    await queryRunner.query(
      `ALTER TABLE "campaign_ai_reports" ADD CONSTRAINT "FK_campaign_ai_reports_campaign_influencer_id" FOREIGN KEY ("campaign_influencer_id") REFERENCES "campaign_influencers"("id") ON DELETE CASCADE ON UPDATE NO ACTION`,
    );
  }

  public async down(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.query(
      `ALTER TABLE "campaign_ai_reports" DROP CONSTRAINT "FK_campaign_ai_reports_campaign_influencer_id"`,
    );
    await queryRunner.query(
      `ALTER TABLE "campaign_ai_reports" DROP CONSTRAINT "FK_campaign_ai_reports_campaign_id"`,
    );
    await queryRunner.query(`DROP INDEX "public"."UQ_campaign_ai_report_influencer_number"`);
    await queryRunner.query(`DROP INDEX "public"."IDX_campaign_ai_report_campaign_influencer"`);
    await queryRunner.query(`DROP INDEX "public"."IDX_campaign_ai_report_campaign"`);
    await queryRunner.query(`DROP TABLE "campaign_ai_reports"`);
  }
}
