import { redirect, notFound } from "next/navigation";
import { isAdminSession, hasPermission, getAllPermissions } from "@/lib/adminAuth";
import { connectDB } from "@/lib/db";
import { Service } from "@/models/Service";
import { AdminNavLinks } from "@/components/admin/AdminNavLinks";
import { AdminPageHeader } from "@/components/admin/AdminPageHeader";
import { EditServiceForm } from "@/components/admin/EditServiceForm";
import { TierRow } from "@/components/admin/TierRow";
import { NewTierForm } from "@/components/admin/NewTierForm";

export const dynamic = "force-dynamic";

export default async function EditServicePage({ params }: { params: Promise<{ serviceId: string }> }) {
  if (!(await isAdminSession())) redirect("/de/login?next=%2Fde%2Fadmin%2Forders");

  if (!(await hasPermission("services_view"))) redirect("/de/account");

  const permissions = await getAllPermissions();
  const { serviceId } = await params;

  await connectDB();
  const service = await Service.findById(serviceId).lean();
  if (!service) notFound();

  return (
    <main className="px-6 pt-4 pb-24 max-w-5xl mx-auto">
      <AdminNavLinks permissions={permissions} />
      <AdminPageHeader title="Angebot bearbeiten" />
      <EditServiceForm service={{ ...service, _id: String(service._id) }} />

      <h2 className="text-sm font-medium text-[var(--rk-ink)] mt-10 mb-3">Preisstufen</h2>
      <div className="flex flex-col gap-3 max-w-xl">
        {service.tiers
          .slice()
          .sort((a, b) => a.sortOrder - b.sortOrder)
          .map((tier) => (
            <TierRow
              key={String(tier._id)}
              serviceId={serviceId}
              tier={{
                id: String(tier._id),
                name: tier.name,
                nameEn: tier.nameEn,
                price: tier.price,
                priceFrom: tier.priceFrom,
                deliverables: tier.deliverables,
                deliverablesEn: tier.deliverablesEn,
                active: tier.active,
                addOns: tier.addOns || [],
                promoPrice: tier.promoPrice ?? null,
                promoLabel: tier.promoLabel || "",
                promoFrom: tier.promoFrom ? new Date(tier.promoFrom).toISOString() : null,
                promoUntil: tier.promoUntil ? new Date(tier.promoUntil).toISOString() : null,
              }}
            />
          ))}
        {service.tiers.length === 0 && (
          <p className="text-sm text-[var(--rk-ink-muted)]">Noch keine Preisstufen — Kunden sehen dieses Angebot ohne Buchen-Button, bis mindestens eine aktive Preisstufe existiert.</p>
        )}
        <NewTierForm serviceId={serviceId} />
      </div>
    </main>
  );
}
