import { NextRequest } from "next/server";
import { Role } from "@prisma/client";
import { adjustWalletBalance, walletAdjustmentSchema } from "@/server/admin/wallet-adjustment";
import { fail, ok, parseJson } from "@/server/http";
import { requireUser } from "@/server/security/auth";
import { requireRole } from "@/server/security/rbac";

export async function POST(request: NextRequest) {
  try {
    const auth = await requireUser(request);
    requireRole(auth.roles, [Role.FINANCE_MANAGER, Role.ADMIN, Role.SUPER_ADMIN]);
    const input = await parseJson(request, walletAdjustmentSchema);
    const entry = await adjustWalletBalance({ id: auth.user.id, roles: auth.roles }, input);
    return ok({ ledgerEntry: entry });
  } catch (error) {
    return fail(error);
  }
}
