'use client'; import { useRef, useEffect } from 'react'; import Image from 'next/image'; import { motion } from 'framer-motion'; import { cn } from '@/lib/utils'; import { useConnectionStatus, useMedgemmaStatus, useLocalStatus, useAppStore, useSettings } from '@/store/app-store'; import { GlassTooltip } from '@/components/ui'; import { TabNavigation } from './tab-navigation'; export function Header() { const connectionStatus = useConnectionStatus(); const medgemmaStatus = useMedgemmaStatus(); const localStatus = useLocalStatus(); const settings = useSettings(); const setConnectionStatus = useAppStore((state) => state.setConnectionStatus); const setAvailableModels = useAppStore((state) => state.setAvailableModels); const updateSettings = useAppStore((state) => state.updateSettings); // Determine the active provider's status const activeStatus = settings.provider === 'local' ? localStatus : settings.provider === 'medgemma' ? medgemmaStatus : connectionStatus; const providerLabel = settings.provider === 'local' ? 'Local' : settings.provider === 'medgemma' ? 'MedGemma' : 'Ollama'; const abortControllerRef = useRef(null); // Cleanup on unmount useEffect(() => { return () => { abortControllerRef.current?.abort(); }; }, []); const handleRetryConnection = async () => { // Abort any in-flight request abortControllerRef.current?.abort(); abortControllerRef.current = new AbortController(); setConnectionStatus('checking'); try { const response = await fetch('/api/ollama', { signal: abortControllerRef.current.signal, }); const data = await response.json(); if (data.success) { setConnectionStatus('connected'); setAvailableModels(data.data.models); // Auto-select first model if none selected if (data.data.models.length > 0) { updateSettings({ selectedModel: data.data.models[0] }); } } else { setConnectionStatus('disconnected'); } } catch (error) { // Ignore abort errors if (error instanceof Error && error.name !== 'AbortError') { setConnectionStatus('disconnected'); } } }; return (
{/* Logo / Title */}
ClinicPal

Clinipal - Clinical Error Detector

{/* Right side: Tab Navigation + Connection Status */}
{/* Tab Navigation */}
{/* Connection Status */}
); }