"use client"; import { useState } from "react"; import { Wand2, ImageIcon, Calendar, RefreshCw, Copy } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Textarea } from "@/components/ui/textarea"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { Label } from "@/components/ui/label"; import { Switch } from "@/components/ui/switch"; import { toast } from "sonner"; import { apiFetch, copyToClipboard, type Pet } from "./types"; interface Props { pets: Pet[]; includePetInContent: boolean; setIncludePetInContent: (v: boolean) => void; onImageGenerated: () => void; } export default function PromptEngineerTab({ pets, includePetInContent, setIncludePetInContent, onImageGenerated }: Props) { const [userPrompt, setUserPrompt] = useState(""); const [promptType, setPromptType] = useState("image"); const [targetPlatform, setTargetPlatform] = useState("general"); const [optimizedPrompt, setOptimizedPrompt] = useState(null); const [promptLoading, setPromptLoading] = useState(false); const [imageLoading, setImageLoading] = useState(false); const handleOptimizePrompt = async () => { if (!userPrompt.trim()) { toast.error("Escribe un prompt"); return; } setPromptLoading(true); try { const result = await apiFetch("/prompt-engineer", { method: "POST", body: JSON.stringify({ prompt: userPrompt, type: promptType, platform: targetPlatform }), }); if (result.success) { setOptimizedPrompt(result); toast.success("Prompt optimizado"); } else toast.error(result.error); } catch { toast.error("Error"); } finally { setPromptLoading(false); } }; const handleGenerateImage = async () => { if (!userPrompt.trim()) { toast.error("Escribe un prompt"); return; } setImageLoading(true); try { const result = await apiFetch("/generate/image", { method: "POST", body: JSON.stringify({ prompt: userPrompt, optimizedPrompt: optimizedPrompt?.optimizedPrompt, platform: targetPlatform, style: "realistic", includePet: includePetInContent, petId: pets[0]?.id }), }); if (result.success) { toast.success("Imagen generada"); onImageGenerated(); } else toast.error(result.error); } catch { toast.error("Error"); } finally { setImageLoading(false); } }; return (
Ingeniero de Prompts Describe en lenguaje natural lo que quieres crear