import type { Knex } from "knex";

export async function up(knex: Knex): Promise<void> {
  return knex.schema.createTable("subscriptions", (table) => {
    table.increments("id").primary();
    table
      .integer("user_id")
      .unsigned()
      .notNullable()
      .references("id")
      .inTable("users")
      .onDelete("CASCADE");
    table.string("used_token").nullable();
    table.string("left_token").nullable();
    table.string("used_words").nullable();
    table.string("left_words").nullable();
    table.timestamp("expiry_date").nullable();
    table
      .integer("queries_id")
      .unsigned()
      .notNullable()
      .references("id")
      .inTable("queries")
      .onDelete("CASCADE");
    table
      .integer("plan_id")
      .unsigned()
      .nullable()
      .references("id")
      .inTable("pricing_plans")
      .onDelete("CASCADE");
    table.timestamp("created_at").defaultTo(knex.fn.now());
    table.timestamp("updated_at").defaultTo(knex.fn.now());
    table.timestamp("deleted_at").nullable(); // soft delete
  });
}

export async function down(knex: Knex): Promise<void> {
  return knex.schema.dropTable("subscriptions");
}
