'use client'; import { useState, useEffect } from 'react'; import { Dialog, DialogTitle, DialogContent, DialogActions, Button, TextField, CircularProgress, Alert, Box, Typography } from '@mui/material'; import { useTranslation } from 'react-i18next'; import { useAtomValue } from 'jotai'; import { selectedModelInfoAtom } from '@/lib/store'; import { toast } from 'sonner'; import axios from 'axios'; export default function DatasetDialog({ open, projectId, image, onClose, onSuccess }) { const { t, i18n } = useTranslation(); const selectedModel = useAtomValue(selectedModelInfoAtom); const [question, setQuestion] = useState(''); const [loading, setLoading] = useState(false); const [error, setError] = useState(''); useEffect(() => { if (open) { setQuestion(''); setError(''); } }, [open]); const handleGenerate = async () => { if (!selectedModel) { setError(t('images.selectModelFirst')); return; } if (selectedModel.type !== 'vision') { setError(t('images.visionModelRequired')); return; } if (!question.trim()) { setError(t('images.questionRequired')); return; } try { setLoading(true); setError(''); await axios.post(`/api/projects/${projectId}/images/datasets`, { imageName: image.imageName, question: { question: question.trim() }, model: selectedModel, language: i18n.language }); toast.success(t('images.datasetGenerated')); onSuccess?.(); onClose(); } catch (err) { console.error('Failed to generate dataset:', err); setError(err.response?.data?.error || t('images.generateFailed')); } finally { setLoading(false); } }; const handleClose = () => { if (!loading) { onClose(); } }; return ( {t('images.generateDataset')} {error && ( {error} )} {image && ( {t('images.imageName')} {image.imageName} )} setQuestion(e.target.value)} placeholder={t('images.questionPlaceholder')} disabled={loading} /> {selectedModel && ( {t('images.currentModel')}: {selectedModel.modelName} )} ); }