"use client" import type React from "react" import { Button } from "@/components/ui/button" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Textarea } from "@/components/ui/textarea" import { Checkbox } from "@/components/ui/checkbox" import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group" import Link from "next/link" import { useState } from "react" export default function RegisterPage() { const [step, setStep] = useState<"form" | "payment">("form") const [isSubmitting, setIsSubmitting] = useState(false) const [formData, setFormData] = useState({ name: "", contact: "", contributions: "", expectations: "", howHeard: "", dietary: [] as string[], dietaryOther: "", crewConsent: "", }) const baseTicketPrice = 80 // Early bird price €80 const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() // Validate required fields if ( !formData.name || !formData.contact || !formData.contributions || !formData.expectations || !formData.crewConsent ) { alert("Please fill in all required fields") return } setIsSubmitting(true) try { // Submit registration to Google Sheet first const dietaryString = formData.dietary.join(", ") + (formData.dietaryOther ? `, ${formData.dietaryOther}` : "") const response = await fetch("/api/register", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ name: formData.name, contact: formData.contact, contributions: formData.contributions, expectations: formData.expectations, howHeard: formData.howHeard, dietary: dietaryString, crewConsent: formData.crewConsent, }), }) if (!response.ok) { throw new Error("Failed to record registration") } // Proceed to payment step setStep("payment") } catch (error) { console.error("Registration error:", error) alert("There was an error recording your registration. Please try again.") } finally { setIsSubmitting(false) } } const handleDietaryChange = (value: string, checked: boolean) => { setFormData((prev) => ({ ...prev, dietary: checked ? [...prev.dietary, value] : prev.dietary.filter((item) => item !== value), })) } if (step === "payment") { return (
{/* Header */}
CCG

Complete Your Registration

Choose your payment method

Event Registration Early bird pricing available until Dec 31, 2025
{/* Ticket */}
CCG 2026 Ticket
€80 Early bird (until Dec 31, 2025) • €120 Regular (Jan-Jun 2026) • €150 Late (after Jul 1, 2026)
CCA members: Bring two newcomers, get a free ticket!
€{baseTicketPrice}.00
{/* Total */}
Total Amount
Early bird ticket
€{baseTicketPrice}.00
{/* Payment Methods */}
Payment Options Choose your preferred payment method

All payments are processed securely through Stripe. You'll receive a confirmation email after successful payment.

{/* Footer */}
) } return (
{/* Header */}
CCG

Register for CCG 2026

August 16-22, 2026 at the Commons Hub in Austria

Registration Form Tell us about yourself and what you'd like to bring to CCG
{/* Name */}
setFormData({ ...formData, name: e.target.value })} />
{/* Contact */}
setFormData({ ...formData, contact: e.target.value })} />
{/* Contributions */}