import { getSessionUser } from "@/lib/auth";
import {
  getMailboxDrawerFileShareByEmail,
  updateMailboxDrawerFileShareByEmail,
  type MailboxFileShareAccess,
} from "@/lib/mailbox-file-drawer";

export const runtime = "nodejs";
export const dynamic = "force-dynamic";

export async function GET(
  _request: Request,
  context: { params: Promise<{ itemId: string }> },
) {
  const user = await getSessionUser();
  if (!user) return Response.json({ error: "unauthorized" }, { status: 401 });
  const { itemId } = await context.params;
  const share = await getMailboxDrawerFileShareByEmail(user.email, itemId);
  if (!share) return Response.json({ error: "not-found" }, { status: 404 });
  return Response.json({ ok: true, share });
}

export async function PATCH(
  request: Request,
  context: { params: Promise<{ itemId: string }> },
) {
  const user = await getSessionUser();
  if (!user) return Response.json({ error: "unauthorized" }, { status: 401 });
  const payload = await request.json().catch(() => null) as {
    access?: unknown;
    enabled?: unknown;
  } | null;
  const access: MailboxFileShareAccess = payload?.access === "public" ? "public" : "owner";
  if (typeof payload?.enabled !== "boolean") {
    return Response.json(
      { error: "invalid-share", message: "공유 설정을 확인해주세요." },
      { status: 400 },
    );
  }

  const { itemId } = await context.params;
  const share = await updateMailboxDrawerFileShareByEmail({
    access,
    email: user.email,
    enabled: payload.enabled,
    itemId,
  });
  if (!share) return Response.json({ error: "not-found" }, { status: 404 });
  return Response.json({ ok: true, share });
}

export async function DELETE(
  _request: Request,
  context: { params: Promise<{ itemId: string }> },
) {
  const user = await getSessionUser();
  if (!user) return Response.json({ error: "unauthorized" }, { status: 401 });
  const { itemId } = await context.params;
  const share = await updateMailboxDrawerFileShareByEmail({
    access: "owner",
    email: user.email,
    enabled: false,
    itemId,
  });
  if (!share) return Response.json({ error: "not-found" }, { status: 404 });
  return Response.json({ ok: true, share });
}
