import Link from "next/link";
import { notFound } from "next/navigation";
import { AdminPageHeader, StatusBadge } from "@/components/admin/admin-ui";
import { EventManagementForm } from "@/components/admin/event-management-form";
import { getAdminEvent, getEventCreationOptions } from "@/lib/admin-data";
import { formatAdminCurrency, formatAdminDate } from "@/lib/admin-format";

function localDateTime(date: Date) {
  const offset = date.getTimezoneOffset() * 60_000;
  return new Date(date.getTime() - offset).toISOString().slice(0, 16);
}

export default async function AdminEventPage({ params }: { params: Promise<{ id: string }> }) {
  const { id } = await params;
  const [event, options] = await Promise.all([getAdminEvent(id), getEventCreationOptions()]);
  if (!event) notFound();

  return (
    <div className="min-h-[42rem] pb-8">
      <AdminPageHeader
        eyebrow="Event management"
        title={event.title}
        description={`${formatAdminDate(event.startsAt, true)} · ${event.venue} · ${event.priceCents ? formatAdminCurrency(event.priceCents) : "Free"}`}
        action={
          <div className="flex items-center gap-4">
            <StatusBadge value={event.status} />
            <Link href="/admin/events" className="inline-flex items-center gap-1.5 text-xs font-semibold text-slate-500 transition hover:text-[#1D4ED8]">
              <span className="material-symbols-outlined text-[18px]">arrow_back</span>
              Events
            </Link>
          </div>
        }
      />
      <EventManagementForm
        event={{
          id: event.id,
          title: event.title,
          leagueId: event.leagueId,
          venueId: event.venueId,
          eventType: event.eventType,
          startsAt: localDateTime(event.startsAt),
          endsAt: localDateTime(event.endsAt),
          capacity: event.capacity,
          minParticipants: event.minParticipants,
          registrations: event.registrations,
          priceCents: event.priceCents,
          status: event.status,
          notes: event.notes,
          cancellationReason: event.cancellationReason,
          refundableBalanceCents: event.refundableBalanceCents,
        }}
        leagues={options.leagues}
        venues={options.venues}
      />
    </div>
  );
}
