'use client' import { useState, useEffect } from 'react' import { Box, Paper, Typography, Tabs, Tab, IconButton, useMediaQuery, useTheme, TextField, Button } from '@mui/material' import { Close, Bookmark, BookmarkBorder } from '@mui/icons-material' import { BibleVerse, HighlightColor } from '@/types' import { HighlightsTab } from './highlights-tab' interface VersDetailsPanelProps { verse: BibleVerse | null isOpen: boolean onClose: () => void isBookmarked: boolean onToggleBookmark: () => void onAddNote: (note: string) => void isHighlighted?: boolean currentHighlightColor?: HighlightColor | null onHighlightVerse?: (color: HighlightColor) => void onChangeHighlightColor?: (color: HighlightColor) => void onRemoveHighlight?: () => void syncStatus?: 'synced' | 'syncing' | 'pending' | 'error' syncErrorMessage?: string } export function VersDetailsPanel({ verse, isOpen, onClose, isBookmarked, onToggleBookmark, onAddNote, isHighlighted, currentHighlightColor, onHighlightVerse, onChangeHighlightColor, onRemoveHighlight, syncStatus, syncErrorMessage, }: VersDetailsPanelProps) { const theme = useTheme() const isMobile = useMediaQuery(theme.breakpoints.down('sm')) const [tabValue, setTabValue] = useState(0) const [noteText, setNoteText] = useState('') // Reset to Notes tab when verse changes useEffect(() => { setTabValue(0) }, [verse?.id]) if (!verse || !isOpen) return null const handleAddNote = () => { if (noteText.trim()) { onAddNote(noteText) setNoteText('') } } const PanelContent = ( {/* Verse Header */} {verse.chapter?.book?.name} {verse.chapter?.chapterNum}:{verse.verseNum} {/* Verse Text */} {verse.text} {/* Bookmark Button */} {/* Tabs */} setTabValue(newValue)} variant={isMobile ? 'fullWidth' : 'standard'} sx={{ borderBottom: 1, borderColor: 'divider' }} > {/* Tab Content */} {tabValue === 0 && ( setNoteText(e.target.value)} size="small" sx={{ mb: 1 }} /> )} {tabValue === 1 && ( { if (isHighlighted) { onRemoveHighlight?.() } else { onHighlightVerse?.('yellow') } }} onColorChange={(color) => onChangeHighlightColor?.(color)} syncStatus={syncStatus} syncErrorMessage={syncErrorMessage} /> )} {tabValue === 2 && ( Cross-references coming soon )} ) if (isMobile) { return ( {PanelContent} ) } return ( {PanelContent} ) }