import Link from "next/link";
import { notFound } from "next/navigation";
import { ApiError } from "@/lib/api/server";
import { getAdminEvent, getAdminEventPromos, getAdminEventVouchers } from "@/lib/api/admin";
import { PromoManager } from "@/components/admin/promo-manager";
import { VoucherManager } from "@/components/admin/voucher-manager";
import { ensureSignatureEvent } from "@/lib/admin/signature-guard";

export default async function AdminSignaturePromoVoucherPage({
  params,
}: {
  params: Promise<{ id: string }>;
}) {
  const { id } = await params;

  const [event, promosRes, vouchersRes] = await Promise.all([
    getAdminEvent(id)
      .then((res) => res.data)
      .catch((error) => {
        if (error instanceof ApiError && (error.status === 404 || error.status === 403)) {
          notFound();
        }
        throw error;
      }),
    getAdminEventPromos(id),
    getAdminEventVouchers(id),
  ]);

  ensureSignatureEvent(event);

  return (
    <div className="max-w-2xl">
      <Link href={`/admin/signature/events/${id}`} className="text-sm font-medium text-kolabora-primary">
        &larr; Back to Event Detail
      </Link>
      <h2 className="mt-4 text-lg font-semibold">Promo &amp; Voucher &mdash; {event.title}</h2>

      <div className="mt-8">
        <h3 className="text-base font-semibold">Promo Code (Percentage Discount)</h3>
        <div className="mt-3">
          <PromoManager eventId={event.id} promos={promosRes.data} ticketTypes={event.ticket_types ?? []} />
        </div>
      </div>

      <div className="mt-10">
        <h3 className="text-base font-semibold">Voucher Code (Fixed Amount Discount)</h3>
        <div className="mt-3">
          <VoucherManager eventId={event.id} vouchers={vouchersRes.data} ticketTypes={event.ticket_types ?? []} />
        </div>
      </div>
    </div>
  );
}
