import React, { useState, useRef } from 'react'; import { geminiService } from '../services/geminiService'; import { Image as ImageIcon, Video, Wand2, Download, Loader2, Sparkles } from 'lucide-react'; import { Language } from '../types'; import { translations } from '../utils/localization'; interface CreativeStudioProps { language: Language; addToast: (type: 'success' | 'error' | 'info', msg: string) => void; } type Mode = 'image-gen' | 'image-edit' | 'video-gen'; const CreativeStudio: React.FC = ({ language, addToast }) => { const t = translations[language].creative; const tCommon = translations[language].common; const [mode, setMode] = useState('image-gen'); const [prompt, setPrompt] = useState(''); const [isLoading, setIsLoading] = useState(false); const [resultUrl, setResultUrl] = useState(null); const [statusMessage, setStatusMessage] = useState(''); const [uploadedImage, setUploadedImage] = useState(null); const fileInputRef = useRef(null); const handleGenerate = async () => { if (!prompt.trim()) return; setIsLoading(true); setResultUrl(null); setStatusMessage(t.creatingBtn); try { if (mode === 'image-gen') { const url = await geminiService.generateImage(prompt); setResultUrl(url); } else if (mode === 'video-gen') { const url = await geminiService.generateVideo(prompt, (status) => setStatusMessage(status)); setResultUrl(url); } else if (mode === 'image-edit') { if (!uploadedImage) { addToast('error', t.uploadAlert); setIsLoading(false); return; } const url = await geminiService.editImage(uploadedImage, prompt); setResultUrl(url); } } catch (e) { console.error(e); addToast('error', "Generation failed."); } finally { setIsLoading(false); } }; const handleImageUpload = (e: React.ChangeEvent) => { const file = e.target.files?.[0]; if (file) { const reader = new FileReader(); reader.onloadend = () => { setUploadedImage(reader.result as string); }; reader.readAsDataURL(file); } }; // ... rest of UI (same as before) ... const ModeButton = ({ id, icon: Icon, label }: { id: Mode, icon: React.ElementType, label: string }) => { const isActive = mode === id; return ( ); } return (
{/* ... Header & Controls (same) ... */}

{t.title}

{tCommon.poweredBy}

{/* Input Section */}
{/* Decor */}
{mode === 'image-edit' && (
fileInputRef.current?.click()} className="border-2 border-dashed border-slate-200 rounded-2xl h-48 flex flex-col items-center justify-center cursor-pointer hover:bg-indigo-50 hover:border-indigo-200 transition-all duration-300 overflow-hidden relative group" > {uploadedImage ? ( Base ) : (
{t.uploadPlaceholder}
)}
)}