import { site } from "@/content/site"; import type { PublicCampFacts } from "@/lib/camp"; import { formatEuroShort } from "@/lib/money"; import type { PublicPricing } from "@/lib/public-page"; import { BookButton } from "../booking/BookingProvider"; // Bewusst ohne Startdatum des Verkaufs (Wunsch des Auftraggebers). const CLOSED_TEXT: Record, string> = { PREVIEW: "Bald buchbar.", NOT_RELEASED: "Die Buchung ist noch nicht freigeschaltet. Wir veröffentlichen alle verbindlichen Angaben vor dem Verkaufsstart.", CAMP_STARTED: "Die Buchung ist geschlossen.", NOT_CONFIGURED: "Die Buchung ist derzeit nicht verfügbar.", }; function PriceDisplay({ pricing }: { pricing: PublicPricing }) { if (pricing.phase === "REGULAR" && pricing.currentCents !== null) { return ( <>

{formatEuroShort(pricing.currentCents)}

pro Person

); } // Vorschau und Early Bird: regulaerer Preis durchgestrichen, Early Bird gross. const earlyBird = pricing.currentCents ?? pricing.earlyBirdCents; return ( <>

Regulärer Preis {formatEuroShort(pricing.regularCents)}

{formatEuroShort(earlyBird)} Early Bird

Early-Bird-Preis pro Person, gültig bis einschließlich 31. Dezember 2026.

); } export function PricingSection({ pricing, facts, showDrafts }: { pricing: PublicPricing; facts: PublicCampFacts; showDrafts: boolean }) { const included = site.services.included.filter((s) => s.confirmed); const title = pricing.phase === "REGULAR" ? "Jetzt Platz sichern" : "Jetzt Platz sichern mit Early Bird"; return (

{title}

{pricing.mode === "test" && (

Testmodus Zahlungen laufen über Stripe-Testdaten, es wird kein Geld eingezogen. {pricing.phaseSimulated && " Die Preisphase ist für Tests simuliert."}

)}
  • Gesamtpreis pro Person für die Teilnahme mit geteilter Unterbringung.
  • {pricing.installmentsAllowed ? "Bezahlen kannst du auf einmal oder in bis zu drei Raten. Die erste Rate ist bei Buchung fällig, die letzte spätestens 30 Tage vor Anreise." : "Bezahlt wird bei Buchung. Ob zusätzlich Ratenzahlung möglich ist, geben wir bekannt, sobald der Termin feststeht."}
  • Einen Gutscheincode kannst du im Buchungsschritt eingeben.
  • {facts.taxNote ? (
  • {facts.taxNote}
  • ) : ( showDrafts && (
  • Steuerlicher Preishinweis folgt vor Verkaufsstart
  • ) )}
{pricing.checkoutOpen ? ( Jetzt Platz sichern ) : (

{CLOSED_TEXT[pricing.closedReason ?? "NOT_CONFIGURED"]}

)}
); }