import { Kysely, ParseJSONResultsPlugin, SqliteDialect } from "kysely";
import SqliteDatabase from "better-sqlite3";
import type { db } from "dbtype";

type DB = db.DB;

export function createSqliteDialect() {
    const url = process.env.DATABASE_URL;
    if (!url) {
        throw new Error("DATABASE_URL is not set");
    }
    const db = new SqliteDatabase(url);
    return new SqliteDialect({
        database: db,
    });
}

// Create a new Kysely instance with a new SqliteDatabase instance
let kysely: Kysely<DB> | null = null;
export function getKysely() {
    if (!kysely) {
        kysely = new Kysely<DB>({
            dialect: createSqliteDialect(),
            // plugins: [new ParseJSONResultsPlugin()],
        });
    }
    return kysely;
}