'use client'; import { useState, useEffect, useRef } from 'react'; import { Textarea } from '@/components/ui/textarea'; import { Loader2, Check } from 'lucide-react'; import { saveUserNote } from '@/lib/actions/user-tabs'; import { toast } from 'sonner'; interface AdminNoteProps { userId: string; initialNote?: string; } export function AdminNote({ userId, initialNote = '' }: AdminNoteProps) { const [content, setContent] = useState(initialNote); const [status, setStatus] = useState<'idle' | 'saving' | 'saved' | 'error'>('idle'); const timeoutRef = useRef(null); // Sync remote changes if any (unlikely in single user flow but good practice) useEffect(() => { setContent(initialNote || ''); }, [initialNote]); const handleChange = (e: React.ChangeEvent) => { const newValue = e.target.value; setContent(newValue); setStatus('idle'); // Debounce save if (timeoutRef.current) clearTimeout(timeoutRef.current); timeoutRef.current = setTimeout(async () => { if (newValue.trim() === initialNote.trim()) return; setStatus('saving'); const result = await saveUserNote(userId, newValue); if (result.success) { setStatus('saved'); // Reset saved status after 2 seconds setTimeout(() => setStatus('idle'), 2000); } else { setStatus('error'); toast.error("Failed to save note"); } }, 1000); // 1s delay }; return (