import { useState } from 'react' import { Box, Button, CircularProgress, Typography } from '@mui/material' import { ArrowRight, ArrowLeft, Save } from 'lucide-react' import { useNavigate } from 'react-router' import { PageHeader } from '../../components/layout' import { NeedBuilderProgress, NeedInput, CriteriaReviewPanel, FollowUpPanel, WeightingEditor, NeedCardPreview, NeedBuilderErrorState, } from '../../components/demand' import { aiService } from '../../services/aiService' import { weightingService } from '../../services/weightingService' import { NeedBuilderStep } from '../../domain/needBuilder' import type { ParseNeedResult } from '../../domain/needBuilder' import type { WeightingKey } from '../../domain/needBuilder' export default function AISearch() { const navigate = useNavigate() const [step, setStep] = useState(NeedBuilderStep.IDLE) const [inputText, setInputText] = useState('') const [parseResult, setParseResult] = useState(null) const [answers, setAnswers] = useState>({}) const [weights, setWeights] = useState>(weightingService.getDefaultWeights()) const [error, setError] = useState(null) async function handleAnalyze() { setStep(NeedBuilderStep.PARSING) setError(null) try { const resp = await aiService.parseNeed(inputText) const result = resp.data setParseResult(result) setWeights(result.suggestedWeights as Record) setStep(NeedBuilderStep.PARSED_REQUIRES_REVIEW) } catch { setError('Die KI-Analyse ist fehlgeschlagen. Bitte versuchen Sie es erneut.') setStep(NeedBuilderStep.ERROR) } } function handleAnswer(id: string, ans: string) { setAnswers(prev => ({ ...prev, [id]: ans })) } function handleContinueToWeighting() { setStep(NeedBuilderStep.WEIGHTING_REVIEW) } function handleContinueToSave() { setStep(NeedBuilderStep.READY_TO_SAVE) } async function handleSave() { setStep(NeedBuilderStep.SAVING) await new Promise(r => setTimeout(r, 800)) navigate('/demand/results', { state: { fromNeedBuilder: true } }) } function handleRetry() { setStep(NeedBuilderStep.IDLE) setError(null) setParseResult(null) } const isReview = step === NeedBuilderStep.PARSED_REQUIRES_REVIEW || step === NeedBuilderStep.CLARIFICATION_REQUIRED const isSaveStep = step === NeedBuilderStep.READY_TO_SAVE || step === NeedBuilderStep.SAVING return ( {/* Step: Input */} {step === NeedBuilderStep.IDLE && ( )} {/* Step: Parsing */} {step === NeedBuilderStep.PARSING && ( KI analysiert Ihren Bedarf… Kriterien werden extrahiert und bewertet )} {/* Step: Criteria Review + Follow-up */} {isReview && parseResult && ( )} {/* Step: Weighting */} {step === NeedBuilderStep.WEIGHTING_REVIEW && ( )} {/* Step: Preview + Save */} {isSaveStep && parseResult && ( )} {/* Step: Error */} {step === NeedBuilderStep.ERROR && ( )} ) }