import type { Metadata } from "next";
import Link from "next/link";
import { notFound, redirect } from "next/navigation";
import { getServerSession } from "next-auth";
import { authOptions } from "@/lib/auth";
import { tripService } from "@/server/services/trip.service";
import { organizerService } from "@/server/services/organizer.service";
import { bookingService } from "@/server/services/booking.service";
import { formatRupiah } from "@/lib/utils";
import { formatTripCalendarDateRangeLong } from "@/lib/trip-dates";
import { isFreeTrip } from "@/lib/trip-pricing";
import { categoryMeta } from "@/lib/activity-category";
import { MarkPaidButton } from "@/features/booking/components/mark-paid-button";
import { CopyButton } from "@/features/booking/components/copy-button";
export const metadata: Metadata = {
title: "Detail Pembayaran",
robots: { index: false, follow: false },
};
interface PageProps {
params: Promise<{ id: string }>;
}
export default async function PaymentPage({ params }: PageProps) {
const { id } = await params;
const session = await getServerSession(authOptions);
if (!session?.user) {
redirect(`/login?callbackUrl=/trips/${id}/payment`);
}
let trip;
try {
trip = await tripService.getTripById(id);
} catch {
notFound();
}
// Organizer trip-nya sendiri tidak butuh halaman pembayaran.
if (trip.organizerId === session.user.id) {
redirect(`/trips/${id}`);
}
const booking = await bookingService.getByTripAndUser(
trip.id,
session.user.id
);
if (!booking || booking.status === "CANCELLED") {
return
{catMeta.label}
๐
{dateRange} ยท ๐ {trip.location}
Organizer:{" "}
{trip.organizer.name}
{trip.title}
{tripIsFree ? "Trip ini gratis โ kamu tidak perlu transfer apa-apa." : "Transfer manual ke rekening organizer di bawah, lalu tandai sebagai sudah bayar."}
{tripHeader} {tripIsFree ? (Halaman pembayaran hanya tersedia untuk peserta trip{" "} {title}.
Lihat detail tripTidak ada biaya yang perlu kamu transfer.
Status keikutsertaan
{bookingStatus === "PAID" ? "โ Terkonfirmasi sebagai peserta" : "โณ Menunggu persetujuan organizer"}
Rekening organizer belum tersedia
Organizer trip ini belum melengkapi data verifikasi (bank). Hubungi organizer langsung lewat profilnya untuk koordinasi pembayaran.
Pastikan nominal persis seperti tercantum supaya organizer mudah mencocokkan.
โ Pembayaran kamu sudah dikonfirmasi oleh{" "} {organizerName} . Sampai jumpa di trip!
) : (โณ Kamu sudah menandai sudah bayar. Menunggu organizer mengecek dan mengonfirmasi.
)}{label}
{value}