import type { Kysely } from "kysely";
import { sql } from "kysely";

export async function up(db: Kysely<any>): Promise<void> {
    await db.schema
        .createTable("campaigns")
        .addColumn("id", "uuid", (col) =>
            col.primaryKey().defaultTo(sql`gen_random_uuid()`),)
        .addColumn("name", "text", (col) => col.notNull())
        .addColumn("title", "text", (col) => col.notNull())
        .addColumn("body", "text", (col) => col.notNull())
        .addColumn("image_url", "text")
        .addColumn("status", "text", (col) => col.notNull().defaultTo("DRAFT"))
        .addColumn("scheduled_at", "timestamptz")
        .addColumn("target_criteria", "jsonb", (col) => col.notNull().defaultTo("{}"))
        .addColumn("additional_data", "jsonb", (col) => col.notNull().defaultTo("{}"))
        .addColumn("created_at", "timestamptz", (col) =>
            col.notNull().defaultTo(sql`now()`),)
        .addColumn("updated_at", "timestamptz", (col) =>
            col.notNull().defaultTo(sql`now()`),)
        .execute();
}

export async function down(db: Kysely<any>): Promise<void> {
    await db.schema.dropTable("campaigns").execute();
}
