import { useState } from 'react'; import { Card, CardContent, CardHeader, CardTitle } from './ui/card'; import { Input } from './ui/input'; import { Badge } from './ui/badge'; import { Button } from './ui/button'; import { Tabs, TabsContent, TabsList, TabsTrigger } from './ui/tabs'; import { Heart, Search, AlertTriangle, Book, Calendar, TrendingUp } from 'lucide-react'; import { User, Farm } from '../types'; import { mockDiseases, mockHealthRecords, mockTanks } from '../mockData'; interface HealthLibraryProps { user: User; selectedFarm: Farm | null; } export default function HealthLibrary({ user, selectedFarm }: HealthLibraryProps) { const [searchQuery, setSearchQuery] = useState(''); const [selectedDisease, setSelectedDisease] = useState(null); const [severityFilter, setSeverityFilter] = useState('all'); const filteredDiseases = mockDiseases.filter(disease => { const matchesSearch = disease.name.toLowerCase().includes(searchQuery.toLowerCase()) || disease.symptoms.some(s => s.toLowerCase().includes(searchQuery.toLowerCase())); const matchesSeverity = severityFilter === 'all' || disease.severity === severityFilter; return matchesSearch && matchesSeverity; }); const healthRecords = selectedFarm ? mockHealthRecords.filter(hr => { const tank = mockTanks.find(t => t.id === hr.tankId); return tank?.farmId === selectedFarm.id; }) : mockHealthRecords; const activeCases = healthRecords.filter(hr => !hr.resolved).length; const totalMortality = healthRecords.reduce((sum, hr) => sum + hr.mortality, 0); const mortalityRate = selectedFarm ? ((totalMortality / mockTanks.filter(t => t.farmId === selectedFarm.id).reduce((sum, t) => sum + t.currentCount, 0)) * 100).toFixed(2) : '0'; const getSeverityColor = (severity: string) => { switch (severity) { case 'critical': return 'bg-red-100 text-red-800'; case 'high': return 'bg-orange-100 text-orange-800'; case 'medium': return 'bg-yellow-100 text-yellow-800'; case 'low': return 'bg-blue-100 text-blue-800'; default: return 'bg-gray-100 text-gray-800'; } }; const currentDisease = selectedDisease ? mockDiseases.find(d => d.id === selectedDisease) : null; return (

Health Management Library

Disease information and health records

{/* Health Overview */}
Active Cases
{activeCases}

Under treatment

Total Mortality
{totalMortality}

This month

Mortality Rate
{mortalityRate}%

Within normal range

Health Score
8.5/10

Excellent condition

Disease Library Health Records {/* Disease Library */}
setSearchQuery(e.target.value)} className="pl-10" />
{/* Disease List */}
{filteredDiseases.map(disease => (
setSelectedDisease(disease.id)} className={`p-3 border rounded-lg cursor-pointer transition-colors ${ selectedDisease === disease.id ? 'bg-blue-50 border-blue-300' : 'hover:bg-gray-50' }`} >

{disease.name}

{disease.severity}

{disease.symptoms.length} symptoms

))}
{/* Disease Details */}
{currentDisease ? (
{currentDisease.name} {currentDisease.severity} Severity

Common Symptoms

    {currentDisease.symptoms.map((symptom, index) => (
  • {symptom}
  • ))}

Treatment Protocol

{currentDisease.treatment}

Preventive Measures

    {currentDisease.preventiveMeasures.map((measure, index) => (
  • ✓ {measure}
  • ))}
) : (

Select a disease to view details

)}
{/* Health Records */} Treatment History
{healthRecords.map(record => { const disease = mockDiseases.find(d => d.id === record.diseaseId); const tank = mockTanks.find(t => t.id === record.tankId); return (

{disease?.name}

{record.resolved ? 'Resolved' : 'Active'}

{tank?.name} • {new Date(record.date).toLocaleDateString()}

{record.affectedCount} affected

{record.mortality} mortality

Treatment Applied

{record.treatmentApplied}

{record.notes && (

Notes

{record.notes}

)}
); })} {healthRecords.length === 0 && (

No health records found

Your fish are healthy!

)}
{/* Mortality Heatmap */} Mortality Distribution by Tank
{mockTanks.filter(t => !selectedFarm || t.farmId === selectedFarm.id).map(tank => { const tankRecords = healthRecords.filter(hr => hr.tankId === tank.id); const tankMortality = tankRecords.reduce((sum, hr) => sum + hr.mortality, 0); const mortalityPercent = ((tankMortality / tank.initialCount) * 100).toFixed(2); return (

{tank.name}

{tank.species}

{tankMortality} fish

{mortalityPercent}%

5 ? 'bg-red-600' : Number(mortalityPercent) > 2 ? 'bg-orange-600' : 'bg-green-600' }`} style={{ width: `${Math.min(Number(mortalityPercent) * 10, 100)}%` }} />
); })}
); }