import type { Payment, Prisma } from "@prisma/client";

export function asRecord(value: Prisma.JsonValue | null | undefined): Record<string, unknown> {
  if (value && typeof value === "object" && !Array.isArray(value)) {
    return value as Record<string, unknown>;
  }
  return {};
}

export function presentPayment(payment: Payment) {
  const webhookError =
    payment.webhookSentAt || payment.webhookError === "SENDING" ? null : payment.webhookError;
  return {
    id: payment.id,
    orderId: payment.orderId,
    productId: payment.productId,
    amount: payment.amount,
    status: payment.status,
    description: payment.description,
    customerName: payment.customerName,
    customerEmail: payment.customerEmail,
    customerPhone: payment.customerPhone,
    returnUrl: payment.returnUrl,
    cancelUrl: payment.cancelUrl,
    webhookUrl: payment.webhookUrl,
    ipayReference: payment.ipayReference,
    ipayStatus: payment.ipayStatus,
    metadata: asRecord(payment.metadata),
    webhookSentAt: payment.webhookSentAt,
    webhookError,
    createdAt: payment.createdAt,
    updatedAt: payment.updatedAt,
  };
}
