import type { Knex } from "knex";

export async function up(knex: Knex): Promise<void> {
  await knex.schema.createTable("blogs", (table) => {
    table.increments("id").primary();
    table.string("title").notNullable();
    table.text("description", "mediumtext").notNullable();
    table.string("slug").nullable().unique();
    table.string("meta_title").notNullable();
    table.text("meta_description", "mediumtext").notNullable();
    table.string("image").nullable();
    table.text("content", "longtext");
    table.boolean("is_active").notNullable().defaultTo(false);
    table
      .integer("lang")
      .unsigned()
      .notNullable()
      .references("id")
      .inTable("languages")
      .onDelete("CASCADE");
    table.timestamps(true, true); // created_at, updated_at
  });

  // Self-relation table: blog_id <-> related_blog_id
  await knex.schema.createTable("related_blogs", (table) => {
    table.increments("id").primary();
    table
      .integer("blog_id")
      .unsigned()
      .notNullable()
      .references("id")
      .inTable("blogs")
      .onDelete("CASCADE");

    table
      .integer("related_blog_id")
      .unsigned()
      .notNullable()
      .references("id")
      .inTable("blogs")
      .onDelete("CASCADE");

    table.unique(["blog_id", "related_blog_id"]);
    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> {
  await knex.schema.dropTableIfExists("related_blogs");
  await knex.schema.dropTableIfExists("blogs");
}
