"use client"; import type { DailyAdventureItemData, DailyTodoData, DayMode } from "@adventureos/shared"; import { DAY_MODES } from "@adventureos/shared"; import { useState } from "react"; import Link from "next/link"; import { useAdventureMutations } from "@/hooks/useAdventureMutations"; import { AdventureItemRow } from "@/components/features/adventure-item-row"; import { ChecklistItem } from "@/components/features/checklist-item"; interface TodaysAdventureProps { date: string; chapter: string; journeyDay: number; isRestDay: boolean; isCustomized: boolean; workHoursTarget: number | null; dayMode: DayMode; isBackfilled: boolean; items: DailyAdventureItemData[]; todos: DailyTodoData[]; } export function TodaysAdventure({ date, chapter, journeyDay, isRestDay, isCustomized, workHoursTarget, dayMode, isBackfilled, items, todos, }: TodaysAdventureProps) { const [customize, setCustomize] = useState(false); const [newTodo, setNewTodo] = useState(""); const [newItemLabel, setNewItemLabel] = useState(""); const [workTarget, setWorkTarget] = useState( workHoursTarget ?? items.find((i) => i.type === "duration")?.config?.targetHours ?? 7.5 ); const { updateItem, addItem, removeItem, todoMut, restDay, updateWorkHours, updateDayMode } = useAdventureMutations(date, items); const checklists = items.filter((i) => i.type === "checklist"); const main = items.filter((i) => i.type !== "checklist"); return (
Today's Adventure {chapter} · Day {journeyDay} {isBackfilled && " · Logged later"}
{dayMode === "low_energy" && ( Low-energy day — lighter expectations )} {customize && ( Edit weekday template → )}
{customize && (

Editing today only — templates unchanged {isCustomized && " · This day has custom overrides"}

)} {isRestDay && (

Rest day — your adventure pauses gently today.

)}
{main.map((item) => ( updateItem.mutate({ id: item.id, value, state })} onMetaUpdate={(updates) => updateItem.mutate({ id: item.id, ...updates })} onRemove={() => removeItem.mutate(item.id)} /> ))}
{customize && (
setNewItemLabel(e.target.value)} />
)} {customize && items.some((i) => i.type === "duration" && i.label === "Work") && (
Work target (hours): setWorkTarget(Number(e.target.value))} />
)} {checklists.length > 0 && ( <>

Checklists

{checklists.map((item) => ( updateItem.mutate({ id: item.id, value: { checks } })} /> ))}
)}

Today's Todos

{todos.map((todo) => ( ))}
{!isRestDay && (
setNewTodo(e.target.value)} onKeyDown={(e) => { if (e.key === "Enter" && newTodo.trim()) { todoMut.mutate( { action: "create", label: newTodo.trim() }, { onSuccess: () => setNewTodo("") } ); } }} />
)}
); }