import Image from "next/image"; import { site, type Media } from "@/content/site"; import type { PublicCampFacts } from "@/lib/camp"; import { formatEuroShort } from "@/lib/money"; import type { PublicPricing } from "@/lib/public-page"; import { formatIsoDateLong } from "@/lib/time"; import { MediaFrame } from "./MediaFrame"; import { BookButton } from "./booking/BookingProvider"; export function dateLine(facts: PublicCampFacts): string | null { if (!facts.startDate) return null; if (!facts.endDate) return `ab ${formatIsoDateLong(facts.startDate)}`; // Gleicher Monat: "8. bis 15. Mai 2027" statt zweimal Monat und Jahr. if (facts.startDate.slice(0, 7) === facts.endDate.slice(0, 7)) { return `${Number(facts.startDate.slice(8, 10))}. bis ${formatIsoDateLong(facts.endDate)}`; } return `${formatIsoDateLong(facts.startDate)} bis ${formatIsoDateLong(facts.endDate)}`; } /** Kurzform fuer die mobile Buchungsleiste. Ohne Startdatum des Verkaufs. */ export function priceLine(pricing: PublicPricing): string { if (pricing.phase === "REGULAR" && pricing.currentCents !== null) return `${formatEuroShort(pricing.currentCents)} pro Person`; return `Early Bird ${formatEuroShort(pricing.earlyBirdCents)} statt ${formatEuroShort(pricing.regularCents)}`; } function Backdrop({ media, video }: { media: Media; video: string | null }) { if (media.kind !== "image") { return ; } return ( <> {media.alt} {video && ( // Stumm und ohne Ton-Autoplay; bei reduzierter Bewegung blendet // globals.css das Video aus und das Standbild bleibt.