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

export async function onRequestGet(context: RequestContext) {
  const {
    results,
    success,
  }: {
    results: { id: string }[];
    success: boolean;
  } = await context.env.D1.prepare(
    "SELECT id FROM reports WHERE user = ? ORDER BY created_at LIMIT 50;",
  )
    .bind(context.data.current_user.id)
    .all();

  if (!success) return jsonError("Failed to retrieve reports", 500);

  const ids: string[] = [];
  results.map((v) => ids.push(v.id));

  const kvDataPromises = [];

  for (const id of ids)
    kvDataPromises.push(context.env.DATA.get(`report_${id}`, { type: "json" }));

  let settledKvPromises;

  try {
    settledKvPromises = (await Promise.all(
      kvDataPromises,
    )) as ReportCardProps[];
  } catch (e) {
    console.log(e);
    return jsonError("Failed to resolve reports", 500);
  }

  return jsonResponse(
    JSON.stringify(
      settledKvPromises.map((r) => {
        return {
          created_at: r.created_at,
          id: r.id,
          open: r.open,
          target_usernames: r.target_usernames,
        };
      }),
    ),
  );
}
