"use client" import type React from "react" import { useState } from "react" import { Loader2 } from "lucide-react" import { GlassModal, fieldClass, labelClass } from "./glass-modal" import * as api from "@/lib/api" import { ApiError } from "@/lib/api" import type { EventType, EventVisibility, Room } from "@/lib/types" import { toBackendDateTime, toInputDateTime } from "@/lib/date-utils" interface CreateEventDialogProps { rooms: Room[] defaultRoomId: number | null defaultDate: Date onClose: () => void onCreated: () => void } const TYPE_OPTIONS: { value: EventType; label: string }[] = [ { value: "proposal", label: "Proposal (members vote to confirm)" }, { value: "busy", label: "Busy (blocked time)" }, { value: "private", label: "Private" }, ] const VISIBILITY_OPTIONS: { value: EventVisibility; label: string }[] = [ { value: "room", label: "Room — visible to all members" }, { value: "busy_only", label: "Busy only — hide details" }, { value: "private", label: "Private — only me" }, ] const optionClass = "bg-slate-800 text-white" export function CreateEventDialog({ rooms, defaultRoomId, defaultDate, onClose, onCreated, }: CreateEventDialogProps) { const initialRoom = defaultRoomId ?? rooms[0]?.id ?? 0 const defaultStart = new Date(defaultDate) defaultStart.setHours(9, 0, 0, 0) const defaultEnd = new Date(defaultDate) defaultEnd.setHours(10, 0, 0, 0) const [roomId, setRoomId] = useState(initialRoom) const [title, setTitle] = useState("") const [description, setDescription] = useState("") const [type, setType] = useState("proposal") const [visibility, setVisibility] = useState("room") const [start, setStart] = useState(toInputDateTime(defaultStart)) const [end, setEnd] = useState(toInputDateTime(defaultEnd)) const [minPeople, setMinPeople] = useState(1) const [error, setError] = useState(null) const [submitting, setSubmitting] = useState(false) const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() setError(null) if (!roomId) { setError("Please select a room.") return } const startDate = new Date(start) const endDate = new Date(end) if (endDate <= startDate) { setError("End time must be after the start time.") return } setSubmitting(true) try { await api.createEvent({ room_id: roomId, type, title: title.trim(), description: description.trim(), start_time: toBackendDateTime(startDate), end_time: toBackendDateTime(endDate), visibility, status: type === "proposal" ? "proposed" : "confirmed", min_people: type === "proposal" ? minPeople : 0, }) onCreated() onClose() } catch (err) { setError(err instanceof ApiError ? err.message : "Could not create the event.") } finally { setSubmitting(false) } } if (rooms.length === 0) { return (

You need to be in a room before creating an event. Create or join a room first.

) } return (
setTitle(e.target.value)} className={fieldClass} placeholder="e.g. Team dinner" />