export async function onRequestGet(context: RequestContext) {
  const { searchParams } = new URL(context.request.url);
  const cursor = searchParams.get("cursor");
  const entryType = searchParams.get("type");
  const showClosed = searchParams.get("showClosed") === "true";
  const types: { [k: string]: string } = {
    appeal: `appeal_`,
    gma: `gameappeal_`,
    report: `report_`,
  };
  const permissions: { [k: string]: number[] } = {
    appeal: [1 << 0, 1 << 1],
    gma: [1 << 5],
    report: [1 << 5],
  };
  const { current_user: currentUser } = context.data;

  if (!entryType || !types[entryType])
    return new Response('{"error":"Invalid filter type"}', {
      headers: {
        "content-type": "application/json",
      },
      status: 400,
    });

  if (!permissions[entryType].find((p) => currentUser.permissions & p))
    return new Response('{"error":"You cannot use this filter"}', {
      headers: {
        "content-type": "application/json",
      },
      status: 403,
    });

  let prefix = types[entryType];

  if (showClosed) prefix = `closed${prefix}`;

  const { keys } = await context.env.DATA.list({ cursor, limit: 20, prefix });
  const items = [];

  for (const key of keys) {
    const listItem = await context.env.DATA.get(key.name);

    if (listItem) items.push(JSON.parse(listItem));
  }

  return new Response(JSON.stringify(items), {
    headers: {
      "content-type": "application/json",
    },
  });
}