import { memo, useState, useEffect } from 'react' import { visionApi, type AutoRecordingStatusResponse } from '../lib/visionApi' import { useAuth } from '../hooks/useAuth' const AutoRecordingStatus = memo(() => { const { isAdmin } = useAuth() const isAdminUser = isAdmin() const [status, setStatus] = useState(null) const [loading, setLoading] = useState(false) const [error, setError] = useState(null) // Fetch auto-recording status const fetchStatus = async () => { try { setLoading(true) setError(null) const statusData = await visionApi.getAutoRecordingStatus() setStatus(statusData) } catch (err) { const errorMessage = err instanceof Error ? err.message : 'Failed to fetch auto-recording status' setError(errorMessage) console.error('Failed to fetch auto-recording status:', err) } finally { setLoading(false) } } // Fetch status on mount and set up polling useEffect(() => { if (!isAdminUser) { return } fetchStatus() const interval = setInterval(fetchStatus, 10000) // Poll every 10 seconds return () => clearInterval(interval) }, [isAdminUser]) // Only show to admins if (!isAdminUser) { return null } return (

Auto-Recording System

Server-side automatic recording based on machine state changes

{status?.running ? 'Running' : 'Stopped'}
{error && (

{error}

)} {status && (

System Status

System Running: {status.running ? 'YES' : 'NO'}
Auto-Recording Enabled: {status.auto_recording_enabled ? 'YES' : 'NO'}
Enabled Cameras: {status.enabled_cameras.length}
Retry Queue: {Object.keys(status.retry_queue).length} items
{status.enabled_cameras.length > 0 && (
Enabled Cameras:
{status.enabled_cameras.map((camera) => ( {camera} ))}
)} {Object.keys(status.retry_queue).length > 0 && (
Retry Queue:
{Object.entries(status.retry_queue).map(([camera, retryInfo]) => (
{camera}: {JSON.stringify(retryInfo)}
))}
)}
)} {!status && !loading && !error && (

Auto-recording status not available

Click "Refresh" to fetch the current status

)}
) }) AutoRecordingStatus.displayName = 'AutoRecordingStatus' export { AutoRecordingStatus }