"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, WELLNESS_SCALE_MAX, type DailyQuizAnswers, type DailyQuizSubmission, } from "@/lib/avatar-state"; import { getDailyQuizSubmission, getTodayDateKey, saveDailyQuizSubmission, } from "@/lib/daily-quiz-storage"; import { getJournalEntryForToday, saveJournalEntry, } from "@/lib/journal-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() { const existingSubmission = getDailyQuizSubmission(); const existingJournal = await getJournalEntryForToday(); if (existingSubmission?.date === getTodayDateKey()) { setSubmission(existingSubmission); setAnswers(existingSubmission.answers); } if (existingJournal) { setJournal(existingJournal.content); } 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 savedSubmission = saveDailyQuizSubmission(answers); await saveJournalEntry(journal); setSubmission(savedSubmission); } 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 Sliders from 1 to 5 for how you're doing today. updateAnswer("feeling", value)} /> updateAnswer("stress", value)} /> updateAnswer("energy", value)} /> updateAnswer("sleepLength", value)} /> updateAnswer("sleepQuality", value)} /> Daily journal Write about your day. Saved separately from your quiz answers.