// 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';
export default function BeachClientPage({ config }: { config: any }) {
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
Matcherna spelas 4v4 med inomhusregler,
förutom poängräkningen som följer reglerna för beachvolley.
Turneringsformen som kommer spelas är Double Elimination vilket betyder att alla lag spelar minst två matcher under dagen.
Klasser
Turneringen kan delas upp i tre klasser beroende på antal anmälda lag och nivå:
{classesData.map((c: any, i: number) => (
{c.name.toUpperCase()} {c.desc && ({c.desc})}
))}
Gör en gissning på er nivå i anmälan – skriv gärna om ni är osäkra.
{/* 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
);
}