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

export async function up(db: Kysely<any>): Promise<void> {
    await db.schema
        .createTable("admin_sessions")
        .ifNotExists()
        .addColumn("id", "bigserial", (col) => col.primaryKey())
        .addColumn("pid", "uuid", (col) => col.defaultTo(sql`gen_random_uuid()`))
        .addColumn("user_id", "bigint", (col) =>
            col.references("admin_console_users.id").onDelete("cascade").notNull(),)
        .addColumn("application_type", "varchar(255)", (col) => col.notNull())
        .addColumn("application_version", "varchar(255)", (col) => col.notNull())
        .addColumn("fcm_token", "text", (col) => col.notNull())
        .addColumn("device_type", "varchar(255)", (col) => col.notNull())
        .addColumn("ip_address", "varchar(255)", (col) => col.notNull())
        .addColumn("os", "varchar(255)", (col) => col.notNull())
        .addColumn("browser", "varchar(255)", (col) => col.notNull())
        .addColumn("refresh_token", "text", (col) => col.notNull())
        .addColumn("location", "varchar(255)", (col) => col.notNull())
        .addColumn("created_at", "timestamptz", (col) =>
            col.notNull().defaultTo(sql`NOW()`),)
        .addColumn("updated_at", "timestamptz")
        .execute();

    await db.schema
        .createIndex("admin_sessions_user_id_index")
        .on("admin_sessions")
        .column("user_id")
        .execute();
}

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