import { useState, useEffect } from 'react'
import Header from './components/Header'
import Sidebar from './components/Sidebar'
import Feed from './pages/Feed'
import CreatePost from './pages/CreatePost'
import History from './pages/History'
import Settings from './pages/Settings'
import Search from './pages/Search'
import PostDetail from './pages/PostDetail'
import { api } from './api'
export default function App() {
const [activeTab, setActiveTab] = useState('feed')
const [user, setUser] = useState(null)
const [showLogin, setShowLogin] = useState(true)
const [loginEmail, setLoginEmail] = useState('')
const [loginPassword, setLoginPassword] = useState('')
const [isRegistering, setIsRegistering] = useState(false)
const [loginError, setLoginError] = useState(null)
const [searchQuery, setSearchQuery] = useState('')
const [headerSearchQuery, setHeaderSearchQuery] = useState('')
const [viewingPostId, setViewingPostId] = useState(null)
// Check for saved user on mount
useEffect(() => {
const savedUser = localStorage.getItem('voicevault_user')
if (savedUser) {
try {
const userData = JSON.parse(savedUser)
setUser(userData)
api.setUserId(userData.user_id)
setShowLogin(false)
} catch (err) {
console.error('Failed to parse saved user:', err)
localStorage.removeItem('voicevault_user')
}
}
}, [])
const handleLogin = async (e) => {
e.preventDefault()
setLoginError(null)
try {
const response = isRegistering
? await api.register(loginEmail, loginPassword, loginEmail.split('@')[0])
: await api.login(loginEmail, loginPassword)
setUser(response.user)
localStorage.setItem('voicevault_user', JSON.stringify(response.user))
setShowLogin(false)
setLoginEmail('')
setLoginPassword('')
} catch (err) {
setLoginError(err.message)
}
}
const handleLogout = () => {
setUser(null)
localStorage.removeItem('voicevault_user')
setShowLogin(true)
setActiveTab('feed')
setViewingPostId(null)
}
const handleSearch = async (query) => {
setSearchQuery(query)
if (query.trim() && user?.user_id) {
try {
const results = await api.searchRAG(query, user.user_id)
console.log('Search results:', results)
// You could display these results in a modal or separate view
} catch (err) {
console.error('Search error:', err)
}
}
}
const handleNavigateToSearch = (query) => {
setActiveTab('search')
setHeaderSearchQuery(query)
setViewingPostId(null) // Clear any post detail view
}
const handleViewPost = (postId) => {
setViewingPostId(postId)
}
const handleBackFromPost = () => {
setViewingPostId(null)
}
const handleTabChange = (tab) => {
setActiveTab(tab)
setViewingPostId(null)
}
const handlePostCreated = () => {
// Switch to feed after creating a post
setActiveTab('feed')
setViewingPostId(null)
}
const handleUserUpdate = (updatedUser) => {
setUser(updatedUser)
localStorage.setItem('voicevault_user', JSON.stringify(updatedUser))
}
// Render current page
const renderPage = () => {
if (!user) return null
// If viewing a specific post, show PostDetail
if (viewingPostId) {
return
Archive your audio memories