import type { SvelteKitBkndConfig } from "bknd/adapter/sveltekit";
import { em, entity, text, libsql } from "bknd";
import { createClient } from "@libsql/client";

const schema = em({
  todos: entity("todos", {
    title: text().required(),
    done: text(),
  }),
});

export default {
  connection: libsql(
    createClient({
      url: "file:data.db",
    })
  ),
  config: {
    data: schema.toJSON(),
    auth: {
      enabled: true,
      allow_register: true,
      jwt: {
        issuer: "bknd-sveltekit-example",
        secret: "dev-secret-change-in-production-1234567890abcdef",
      },
      roles: {
        admin: {
          implicit_allow: true,
        },
        default: {
          permissions: ["data.entity.read", "data.entity.create"],
          is_default: true,
        },
      },
    },
  },
  adminOptions: {
    // this path must be the same as in `hooks.server.ts`
    adminBasepath: "/admin"
  },
  options: {
    seed: async (ctx) => {
      await ctx.app.module.auth.createUser({
        email: "admin@example.com",
        password: "password",
        role: "admin",
      });

      await ctx.em.mutator("todos").insertMany([
        { title: "Learn bknd", done: "true" },
        { title: "Build with SvelteKit", done: "false" },
      ]);
    },
  },
} as const satisfies SvelteKitBkndConfig;
