// app/beach/BeachClientPage.tsx
'use client';
import { useEffect, useState } from 'react';
import { FaClipboardList, FaClock, FaInfoCircle, FaLock, FaMapMarkerAlt, FaTicketAlt, FaTrophy, FaUsers } from "react-icons/fa";
import { IoIosMail } from "react-icons/io";
import Footer from '../components/Footer';
import Header from '../components/Header';
import BeachRegistrationForm from './BeachRegistrationForm';
import { SiteConfig } from '../lib/config';
import Image from 'next/image';
import matsommar from "../../public/images/hk-mosf.webp";
export default function BeachClientPage({ config, turnstileSiteKey }: { config: SiteConfig, turnstileSiteKey: string }) {
const [timeInfo, setTimeInfo] = useState({
dateStr: 'Laddar...',
matchStr: 'Laddar...',
deadlineText: 'Laddar...',
isClosed: false,
});
const classesData = Array.isArray(config.beachPage?.classes)
? config.beachPage.classes
: [
{ name: 'Grön', color: '#16a34a', desc: 'Nybörjare' },
{ name: 'Blå', color: '#2563eb', desc: 'Spelat lite' },
{ name: 'Svart', color: '#111827', desc: 'Spelat mycket' }
];
useEffect(() => {
const updateTournamentInfo = () => {
const matchStart = new Date(config.beachPage.matchStart);
const now = new Date();
const infoGathering = new Date(matchStart.getTime() - 30 * 60000);
const closingDate = new Date(matchStart.getTime() - 24 * 60 * 60000);
const dateOptions: Intl.DateTimeFormatOptions = { day: 'numeric', month: 'long', year: 'numeric' };
const timeOptions: Intl.DateTimeFormatOptions = { hour: '2-digit', minute: '2-digit' };
setTimeInfo({
dateStr: matchStart.toLocaleDateString('sv-SE', dateOptions),
matchStr: `Matchstart kl.${matchStart.toLocaleTimeString('sv-SE', timeOptions)} (Infosamling kl.${infoGathering.toLocaleTimeString('sv-SE', timeOptions)})`,
deadlineText: `Anmälan stänger den ${closingDate.toLocaleDateString('sv-SE', dateOptions)} kl.${closingDate.toLocaleTimeString('sv-SE', timeOptions)} (24 timmar innan start) eller om alla platser har blivit fyllda.`,
isClosed: config.beachPage.isClosedOverride || now >= closingDate,
});
};
updateTournamentInfo();
}, [config]);
return (
{/* Logotyp med subtil hover-effekt */}
{/* Huvudrubrik med 3D-känsla */}
Beachturnering
Samla ihop ett kompisgäng och anmäl er!
{/* Moderniserad "Stängd"-box */}
{timeInfo.isClosed && (
{/* Röd dekorationslist i toppen */}
Anmälan är stängd
{config.beachPage.closeReason}
)}
{/* Större och tydligare badge för Turneringsinfo */}
Turneringsinfo
{/* VAR & NÄR - Logistik */}
{/* REGLER & KLASSER - Spelet */}
Regler
Klasser
{config.beachPage?.classesIntroText}
{classesData.map((c: { name: string; color: string; desc?: string }, i: number) => (
{c.name.toUpperCase()} {c.desc && ({c.desc})}
))}
{config.beachPage?.classesOutroText}
{/* KOSTNAD & ANMÄLAN */}
Anmälan & Kostnad
Kostnad: Gratis!
Anmälan görs via formuläret nedan. Du får ett bekräftelsemejl när vi granskat er anmälan.
{timeInfo.deadlineText}
Övrig info:
{(config.beachPage?.otherInfo || "").split('\n').map((line: string, i: number) => (
line.trim() &&
• {line}
))}
{/* Kompaktare PRIS-BANNER */}
{config.beachPage?.prizesText || "Fina priser till alla pallplatser! 🏆"}
{/* Rendera formuläret endast om anmälan är öppen */}
{!timeInfo.isClosed && }
{/* Dekorativ bakgrundscirkel */}
{/* Ikon-badge */}
Kontakta oss
Har du frågor om turneringen, regler eller vill ändra något i er anmälan? Tveka inte att höra av dig!
Skicka ett mejl
);
}