import { castDomainVote } from "../../../db/domains";
import { createNotification } from "../../../db/notifications";
import { getProfile } from "../../../db/profile";
import { usePrisma } from "../../../utils/prisma";

export default defineEventHandler(async (event) => {
  const user = await requireUser(event);
  const id = getRouterParam(event, "id");
  if (!id)
    throw createError({ statusCode: 400, message: "Submission ID fehlt" });

  const body = await readBody(event);
  const vote = body?.vote as string;
  if (vote !== "yes" && vote !== "no") {
    throw createError({
      statusCode: 400,
      message: "vote muss 'yes' oder 'no' sein",
    });
  }

  const db = usePrisma();
  const [result, submission] = await Promise.all([
    castDomainVote(user.id, id, vote),
    db.domainSubmission.findUnique({
      where: { id },
      select: { userId: true, domain: true },
    }),
  ]);

  if (
    submission?.userId &&
    submission.userId !== user.id &&
    (result as any).yesVotes !== undefined
  ) {
    const pr = await getProfile(user.id).catch(() => null);
    const actorName = pr?.nickname ?? pr?.username ?? "Jemand";
    const actorAvatar = pr?.avatar ?? undefined;
    createNotification({
      recipientId: submission.userId,
      type: "domain_vote",
      actorName,
      actorAvatar,
      preview: submission.domain,
    }).catch(() => {});
  }

  return result;
});
