import { MigrationInterface, QueryRunner } from "typeorm";

export class Migrations1785913437302 implements MigrationInterface {
    name = 'Migrations1785913437302'

    public async up(queryRunner: QueryRunner): Promise<void> {
        await queryRunner.query(`CREATE TYPE "public"."ai_report_log_status_enum" AS ENUM('Pending', 'In_progress', 'Completed', 'Failed')`);
        await queryRunner.query(`CREATE TABLE "ai_report_log" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "status" "public"."ai_report_log_status_enum" NOT NULL DEFAULT 'Pending', "number_of_applicant" integer NOT NULL DEFAULT '0', "request_json" jsonb, "response_json" jsonb, "response_id" character varying(255), "model_name" character varying(255), "metadata_json" jsonb, "input_token" integer, "output_token" integer, "total_token" integer, "quota_deducted" boolean NOT NULL DEFAULT false, "error_message" text, "started_at" TIMESTAMP, "completed_at" TIMESTAMP, "created_at" TIMESTAMP NOT NULL DEFAULT now(), "updated_at" TIMESTAMP NOT NULL DEFAULT now(), "campaign_id" uuid, "user_id" uuid, CONSTRAINT "PK_54d77fe4b6429dbbe9be7f658ed" PRIMARY KEY ("id"))`);
        await queryRunner.query(`CREATE INDEX "IDX_ai_report_log_user_created" ON "ai_report_log" ("user_id", "created_at") `);
        await queryRunner.query(`CREATE INDEX "IDX_ai_report_log_status_created" ON "ai_report_log" ("status", "created_at") `);
        await queryRunner.query(`CREATE INDEX "IDX_ai_report_log_campaign_created" ON "ai_report_log" ("campaign_id", "created_at") `);
        //await queryRunner.query(`ALTER TABLE "social_medias" DROP COLUMN "instagram_insights_synced_at"`);
        await queryRunner.query(`ALTER TABLE "campaign_influencers" ADD "ai_score" numeric(10,2)`);
        await queryRunner.query(`ALTER TABLE "campaign_influencers" ADD "ai_note" text`);
        await queryRunner.query(`ALTER TABLE "campaign_influencers" ADD "ai_score_pending" boolean NOT NULL DEFAULT true`);
        await queryRunner.query(`ALTER TABLE "ai_report_log" ADD CONSTRAINT "FK_5ad6abd776c4a248c1d6b055e66" FOREIGN KEY ("campaign_id") REFERENCES "campaigns"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
        await queryRunner.query(`ALTER TABLE "ai_report_log" ADD CONSTRAINT "FK_ed24d28560d94bd9c2b9d0779e0" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
    }

    public async down(queryRunner: QueryRunner): Promise<void> {
        await queryRunner.query(`ALTER TABLE "ai_report_log" DROP CONSTRAINT "FK_ed24d28560d94bd9c2b9d0779e0"`);
        await queryRunner.query(`ALTER TABLE "ai_report_log" DROP CONSTRAINT "FK_5ad6abd776c4a248c1d6b055e66"`);
        await queryRunner.query(`ALTER TABLE "campaign_influencers" DROP COLUMN "ai_score_pending"`);
        await queryRunner.query(`ALTER TABLE "campaign_influencers" DROP COLUMN "ai_note"`);
        await queryRunner.query(`ALTER TABLE "campaign_influencers" DROP COLUMN "ai_score"`);
        //await queryRunner.query(`ALTER TABLE "social_medias" ADD "instagram_insights_synced_at" TIMESTAMP`);
        await queryRunner.query(`DROP INDEX "public"."IDX_ai_report_log_campaign_created"`);
        await queryRunner.query(`DROP INDEX "public"."IDX_ai_report_log_status_created"`);
        await queryRunner.query(`DROP INDEX "public"."IDX_ai_report_log_user_created"`);
        await queryRunner.query(`DROP TABLE "ai_report_log"`);
        await queryRunner.query(`DROP TYPE "public"."ai_report_log_status_enum"`);
    }

}
