import { MigrationInterface, QueryRunner } from "typeorm";

export class Migrations1739799211135 implements MigrationInterface {
    name = 'Migrations1739799211135'

    public async up(queryRunner: QueryRunner): Promise<void> {
        await queryRunner.query(`CREATE TYPE "public"."campaign_payments_payment_mode_enum" AS ENUM('offline', 'online')`);
        await queryRunner.query(`CREATE TYPE "public"."campaign_payments_payment_status_enum" AS ENUM('pending', 'completed', 'failed')`);
        await queryRunner.query(`CREATE TABLE "campaign_payments" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "currency" character varying, "amount" numeric(10,2) NOT NULL DEFAULT '0', "amount_usd" numeric(10,2) NOT NULL DEFAULT '0', "transaction_fee" numeric(10,2) NOT NULL DEFAULT '0', "transaction_fee_usd" numeric(10,2) NOT NULL DEFAULT '0', "platform_fees" numeric(10,2) NOT NULL DEFAULT '0', "platform_fees_usd" numeric(10,2) NOT NULL DEFAULT '0', "influencer_payable_amount" numeric(10,2) NOT NULL DEFAULT '0', "influencer_payable_amount_usd" numeric(10,2) NOT NULL DEFAULT '0', "is_admin_paid" boolean NOT NULL DEFAULT false, "payment_mode" "public"."campaign_payments_payment_mode_enum" NOT NULL DEFAULT 'online', "payment_status" "public"."campaign_payments_payment_status_enum" NOT NULL DEFAULT 'pending', "payment_response" jsonb, "created_at" TIMESTAMP(0) NOT NULL DEFAULT now(), "updated_at" TIMESTAMP(0) NOT NULL DEFAULT now(), "deleted_at" TIMESTAMP(0), "influencer_id" uuid, "brand_id" uuid, "campaign_influencer_id" uuid, "campaign_id" uuid, "payed_by" uuid, CONSTRAINT "REL_f1f09e6160e9ac4f06241c582d" UNIQUE ("influencer_id"), CONSTRAINT "REL_f66ee179a90ff998ea6fc425c9" UNIQUE ("brand_id"), CONSTRAINT "REL_9ffc6377ccf3c36b306050c879" UNIQUE ("campaign_influencer_id"), CONSTRAINT "REL_21bdf7241bc6f562d9aab74c2a" UNIQUE ("campaign_id"), CONSTRAINT "PK_11e500119705e31108bb905f92e" PRIMARY KEY ("id")); COMMENT ON COLUMN "campaign_payments"."transaction_fee" IS 'STRIPE TRANSACTION FEE'; COMMENT ON COLUMN "campaign_payments"."transaction_fee_usd" IS 'STRIPE TRANSACTION FEE'; COMMENT ON COLUMN "campaign_payments"."platform_fees" IS 'CONNECTOR PLATFORM FEE'; COMMENT ON COLUMN "campaign_payments"."platform_fees_usd" IS 'CONNECTOR PLATFORM FEE USD'; COMMENT ON COLUMN "campaign_payments"."influencer_payable_amount" IS 'INFLUENCER PAYABLE AMOUNT'; COMMENT ON COLUMN "campaign_payments"."influencer_payable_amount_usd" IS 'INFLUENCER PAYABLE AMOUNT USD'`);
        await queryRunner.query(`CREATE TYPE "public"."campaign_influencers_payment_mode_enum" AS ENUM('offline', 'online')`);
        await queryRunner.query(`ALTER TABLE "campaign_influencers" ADD "payment_mode" "public"."campaign_influencers_payment_mode_enum" NOT NULL DEFAULT 'online'`);
        await queryRunner.query(`ALTER TABLE "campaign_payments" ADD CONSTRAINT "FK_f1f09e6160e9ac4f06241c582d6" FOREIGN KEY ("influencer_id") REFERENCES "users"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`);
        await queryRunner.query(`ALTER TABLE "campaign_payments" ADD CONSTRAINT "FK_f66ee179a90ff998ea6fc425c9c" FOREIGN KEY ("brand_id") REFERENCES "users"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`);
        await queryRunner.query(`ALTER TABLE "campaign_payments" ADD CONSTRAINT "FK_9ffc6377ccf3c36b306050c8797" FOREIGN KEY ("campaign_influencer_id") REFERENCES "campaign_influencers"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
        await queryRunner.query(`ALTER TABLE "campaign_payments" ADD CONSTRAINT "FK_21bdf7241bc6f562d9aab74c2ae" FOREIGN KEY ("campaign_id") REFERENCES "campaigns"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
        await queryRunner.query(`ALTER TABLE "campaign_payments" ADD CONSTRAINT "FK_e2304bf20ce133fb4b1649bb92c" FOREIGN KEY ("payed_by") REFERENCES "users"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`);
    }

    public async down(queryRunner: QueryRunner): Promise<void> {
        await queryRunner.query(`ALTER TABLE "campaign_payments" DROP CONSTRAINT "FK_e2304bf20ce133fb4b1649bb92c"`);
        await queryRunner.query(`ALTER TABLE "campaign_payments" DROP CONSTRAINT "FK_21bdf7241bc6f562d9aab74c2ae"`);
        await queryRunner.query(`ALTER TABLE "campaign_payments" DROP CONSTRAINT "FK_9ffc6377ccf3c36b306050c8797"`);
        await queryRunner.query(`ALTER TABLE "campaign_payments" DROP CONSTRAINT "FK_f66ee179a90ff998ea6fc425c9c"`);
        await queryRunner.query(`ALTER TABLE "campaign_payments" DROP CONSTRAINT "FK_f1f09e6160e9ac4f06241c582d6"`);
        await queryRunner.query(`ALTER TABLE "campaign_influencers" DROP COLUMN "payment_mode"`);
        await queryRunner.query(`DROP TYPE "public"."campaign_influencers_payment_mode_enum"`);
        await queryRunner.query(`DROP TABLE "campaign_payments"`);
        await queryRunner.query(`DROP TYPE "public"."campaign_payments_payment_status_enum"`);
        await queryRunner.query(`DROP TYPE "public"."campaign_payments_payment_mode_enum"`);
    }

}
