import React, { useState, useCallback } from 'react'; import { BugIcon, SparklesIcon, AlertTriangleIcon } from '../components/icons'; import Spinner from '../components/Spinner'; import { generatePestLibrary, isAIConfigured } from '../services/geminiService'; import type { PestLibraryEntry, View } from '../types'; import { AppStatus } from '../types'; interface PestLibraryViewProps { setActiveView: (view: View) => void; } const PestLibraryView: React.FC = ({ setActiveView }) => { const [status, setStatus] = useState(AppStatus.IDLE); const [location, setLocation] = useState(''); const [pestData, setPestData] = useState(null); const [error, setError] = useState(''); const aiConfigured = isAIConfigured(); const handleGenerate = useCallback(async () => { if (!location.trim()) { setError('Please enter your city or region.'); return; } setStatus(AppStatus.ANALYZING); setError(''); setPestData(null); try { const result = await generatePestLibrary(location); if (result) { setPestData(result); setStatus(AppStatus.SUCCESS); } else { throw new Error('Failed to generate the pest library. The AI may be busy. Please try again.'); } } catch (e: any) { setError(e.message); setStatus(AppStatus.ERROR); } }, [location]); return (

Regional Pest Library

Discover common pests and diseases for bonsai in your area to stay one step ahead.

setLocation(e.target.value)} className="block w-full rounded-md border-0 py-2 px-3 text-stone-900 shadow-sm ring-1 ring-inset ring-stone-300 placeholder:text-stone-400 focus:ring-2 focus:ring-inset focus:ring-green-600 sm:text-sm sm:leading-6" placeholder="e.g., Portland, Oregon" disabled={status === AppStatus.ANALYZING} />
{error &&

{error}

} {!aiConfigured && (

AI features are disabled. Please set your Gemini API key in the{' '} .

)}
{status === AppStatus.ANALYZING && } {status === AppStatus.SUCCESS && pestData && (

Pest & Disease Guide for {location}

{pestData.map((pest, i) => (
{pest.name} ({pest.type}) Show Details Hide Details

{pest.description}

Symptoms:
    {pest.symptoms.map((s, idx) =>
  • {s}
  • )}
Organic Treatment:

{pest.treatment.organic}

Chemical Treatment:

{pest.treatment.chemical}

))}
)} {status === AppStatus.ERROR && (

An Error Occurred

{error}

)}
); }; export default PestLibraryView;