import { jsonError, jsonResponse } from "../../../common.js";

export async function onRequestDelete(context: RequestContext) {
  const noteId = context.params.id as string;
  const creatorIdResult = await context.data.prisma.gameModNote.findUnique({
    select: {
      created_by: true,
    },
    where: {
      id: noteId,
    },
  });

  try {
    await context.data.prisma.gameModNote.delete({
      select: {
        id: true,
      },
      where: {
        created_by: context.data.current_user.id,
        id: noteId,
      },
    });
  } catch {
    return jsonError("Cannot delete notes that are not your own", 403);
  }

  return new Response(null, { status: 204 });
}

export async function onRequestGet(context: RequestContext) {
  const noteId = context.params.id as string;
  const result = await context.data.prisma.gameModNote.findUnique({
    where: {
      id: noteId,
    },
  });

  if (!result) return jsonError("Note not found", 404);

  let noteData = structuredClone(result);
  const gmeEntry: null | { time: number; user: string; name: string } =
    await context.env.DATA.get(`gamemod_${result.created_by}`, "json");

  if (gmeEntry)
    noteData = Object.defineProperty(noteData, "creator_name", {
      value: gmeEntry.name,
    });

  return jsonResponse(JSON.stringify(noteData));
}
