"use client"; import { useEffect, useState } from "react"; import { PixelAvatar } from "@/components/avatar/pixel-avatar"; import { WellnessSlider } from "@/components/daily-quiz/wellness-slider"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "@/components/ui/card"; import { Label } from "@/components/ui/label"; import { defaultDailyQuizAnswers, formatSleepHours, SLEEP_HOURS_MAX, SLEEP_HOURS_MIN, SLEEP_HOURS_STEP, WELLNESS_SCALE_MAX, type DailyQuizAnswers, type DailyQuizSubmission, } from "@/lib/avatar-state"; import { getDailyEntryForToday, saveDailyEntry, } from "@/lib/daily-quiz-storage"; export function DailyQuizForm() { const [answers, setAnswers] = useState( defaultDailyQuizAnswers, ); const [journal, setJournal] = useState(""); const [submission, setSubmission] = useState( null, ); const [isSubmitting, setIsSubmitting] = useState(false); const [error, setError] = useState(null); const [isReady, setIsReady] = useState(false); useEffect(() => { async function loadDailyCheckIn() { try { const existingEntry = await getDailyEntryForToday(); if (existingEntry) { setSubmission(existingEntry); setAnswers(existingEntry.answers); setJournal(existingEntry.journal); } } catch (loadError) { setError( loadError instanceof Error ? loadError.message : "Could not load today's check-in.", ); } finally { setIsReady(true); } } void loadDailyCheckIn(); }, []); const isCompleted = submission !== null; const canSubmit = !isCompleted && !isSubmitting; const updateAnswer = ( key: K, value: DailyQuizAnswers[K], ) => { setAnswers((current) => ({ ...current, [key]: value, })); }; const handleSubmit = async () => { if (!canSubmit) { return; } setIsSubmitting(true); setError(null); try { const savedEntry = await saveDailyEntry(answers, journal); setSubmission(savedEntry); } catch (submitError) { setError( submitError instanceof Error ? submitError.message : "Could not save your daily check-in.", ); } finally { setIsSubmitting(false); } }; if (!isReady) { return (

Loading today's quiz...

); } return (
Today's check-in {isCompleted ? "Completed" : "Not completed"}
Wellness Rate your wellness from 1 to 5. Sleep length uses hours. updateAnswer("feeling", value)} /> updateAnswer("stress", value)} /> updateAnswer("energy", value)} /> updateAnswer("sleepLength", value)} /> updateAnswer("sleepQuality", value)} /> Daily journal Write about your day.