import { getSessionUser } from "@/lib/auth";
import { setMailboxMessageStarByEmail } from "@/lib/official-mail";

type StarMailboxPayload = {
  isStarred?: boolean;
  messageId?: number | string;
};

export async function POST(request: Request) {
  const user = await getSessionUser();

  if (!user) {
    return Response.json({ error: "unauthorized", ok: false }, { status: 401 });
  }

  const payload = (await request.json().catch(() => null)) as StarMailboxPayload | null;
  const messageId = Number(payload?.messageId);
  const nextStarred = payload?.isStarred;

  if (!Number.isInteger(messageId) || messageId <= 0 || typeof nextStarred !== "boolean") {
    return Response.json(
      {
        error: "invalid-payload",
        notice: {
          message: "중요 표시를 바꾸는 중 문제가 발생했습니다.",
          tone: "error",
        },
        ok: false,
      },
      { status: 400 },
    );
  }

  try {
    const isStarred = await setMailboxMessageStarByEmail(user.email, messageId, nextStarred);

    return Response.json({
      isStarred,
      ok: true,
    });
  } catch (error) {
    const detailMessage = error instanceof Error ? error.message : "mailbox star action failed";

    return Response.json(
      {
        error: detailMessage,
        notice: {
          message: "중요 표시를 바꾸는 중 문제가 발생했습니다.",
          tone: "error",
        },
        ok: false,
      },
      { status: detailMessage === "message-not-found" ? 404 : 500 },
    );
  }
}
