import { NextRequest } from "next/server";
import { prisma } from "@/server/db";
import { fail, ok } from "@/server/http";
import { requireUser } from "@/server/security/auth";

export const dynamic = "force-dynamic";

export async function GET(request: NextRequest) {
  try {
    const { user } = await requireUser(request);
    const deposits = await prisma.cryptoDeposit.findMany({
      where: { userId: user.id },
      orderBy: { createdAt: "desc" },
      take: 20
    });

    return ok({ deposits: deposits.map(serializeDeposit) });
  } catch (error) {
    return fail(error);
  }
}

function serializeDeposit(deposit: Awaited<ReturnType<typeof prisma.cryptoDeposit.findMany>>[number]) {
  return {
    id: deposit.id,
    asset: deposit.asset,
    network: deposit.network,
    txHash: deposit.txHash,
    cryptoAmount: deposit.cryptoAmount.toString(),
    eurAmount: deposit.eurAmount?.toString() ?? null,
    eurRate: deposit.eurRate?.toString() ?? null,
    rateSource: deposit.rateSource,
    confirmations: deposit.confirmations,
    requiredConfirmations: deposit.requiredConfirmations,
    status: deposit.status,
    createdAt: deposit.createdAt
  };
}
