import { MigrationInterface, QueryRunner } from "typeorm";

export class Migrations1733728463329 implements MigrationInterface {
    name = 'Migrations1733728463329'

    public async up(queryRunner: QueryRunner): Promise<void> {
        await queryRunner.query(`CREATE TYPE "public"."subscription-history_status_enum" AS ENUM('pending', 'active', 'incomplete', 'past_due', 'canceled', 'unpaid')`);
        await queryRunner.query(`CREATE TABLE "subscription-history" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "stripe_subscription_id" character varying, "status" "public"."subscription-history_status_enum" NOT NULL DEFAULT 'pending', "start_date" character varying, "end_date" character varying, "payment_response" jsonb, "created_at" TIMESTAMP(0) NOT NULL DEFAULT now(), "deleted_at" TIMESTAMP(0), "subsciptionId" uuid, CONSTRAINT "PK_84c1bd59159c62b460d54a70ecf" PRIMARY KEY ("id"))`);
        await queryRunner.query(`CREATE TYPE "public"."subscription_status_enum" AS ENUM('pending', 'active', 'decative', 'canceled', 'failed')`);
        await queryRunner.query(`CREATE TABLE "subscription" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "stripe_subscription_id" character varying, "status" "public"."subscription_status_enum" NOT NULL DEFAULT 'pending', "start_date" character varying, "end_date" character varying, "payment_response" jsonb, "permissions" jsonb, "created_at" TIMESTAMP(0) NOT NULL DEFAULT now(), "updated_at" TIMESTAMP(0) NOT NULL DEFAULT now(), "deleted_at" TIMESTAMP(0), "usersId" uuid, "planId" uuid, CONSTRAINT "PK_8c3e00ebd02103caa1174cd5d9d" PRIMARY KEY ("id"))`);
        await queryRunner.query(`ALTER TABLE "subscription" ADD "transction_id" character varying`);
        await queryRunner.query(`ALTER TABLE "subscription-history" ADD CONSTRAINT "FK_e2cc92a49690664eb0f8f246a68" FOREIGN KEY ("subsciptionId") REFERENCES "subscription"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`);
        await queryRunner.query(`ALTER TABLE "subscription" ADD CONSTRAINT "FK_2e38038a039d24b14634736e974" FOREIGN KEY ("usersId") REFERENCES "users"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`);
        await queryRunner.query(`ALTER TABLE "subscription" ADD CONSTRAINT "FK_6b6d0e4dc88105a4a11103dd2cd" FOREIGN KEY ("planId") REFERENCES "plans"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`);
    }

    public async down(queryRunner: QueryRunner): Promise<void> {
        await queryRunner.query(`ALTER TABLE "subscription" DROP CONSTRAINT "FK_6b6d0e4dc88105a4a11103dd2cd"`);
        await queryRunner.query(`ALTER TABLE "subscription" DROP CONSTRAINT "FK_2e38038a039d24b14634736e974"`);
        await queryRunner.query(`ALTER TABLE "subscription-history" DROP CONSTRAINT "FK_e2cc92a49690664eb0f8f246a68"`);
        await queryRunner.query(`ALTER TABLE "subscription" DROP COLUMN "transction_id"`);
        await queryRunner.query(`DROP TABLE "subscription"`);
        await queryRunner.query(`DROP TYPE "public"."subscription_status_enum"`);
        await queryRunner.query(`DROP TABLE "subscription-history"`);
        await queryRunner.query(`DROP TYPE "public"."subscription-history_status_enum"`);
    }

}
