/* global defineEventHandler, setResponseStatus, readBody, createError */

import fs from "node:fs/promises";

import { database as db } from "../utils/database";
import { isFirstRun } from "./firstRun.get";
import { getPasswordHash } from "./login.post";
import Snowflake from "~/utils/snowflake";

export default defineEventHandler(async (e) => {
  if (!isFirstRun()) {
    setResponseStatus(e, 404);
    return "";
  }

  const body = await readBody(e);
  if (typeof body !== "object") throw createError({ message: "Invalid body", statusCode: 400 });
  const username = body.username;
  if (typeof username !== "string") throw createError({ message: "username is not string", statusCode: 400 });
  const password = body.password;
  if (typeof password !== "string") throw createError({ message: "password is not string", statusCode: 400 });
  const email = body.email;
  if (typeof email !== "string") throw createError({ message: "email is not string", statusCode: 400 });

  const sql = await fs.readFile("./schemaModel.sql", "utf-8");

  const database = await db.new({ multipleStatements: true });
  await database.query(sql);
  await database.execute(
    "INSERT INTO `users` (`id`, `username`, `password`, `email`) VALUES (?, ?, ?, ?)",
    [new Snowflake().toString(), username, getPasswordHash(password), email]);
  return "";
});