import { useState } from "react"; import { useMutation } from "@tanstack/react-query"; import { Button } from "@/components/ui/button"; import { Dialog, DialogContent, DialogHeader, DialogTitle } from "@/components/ui/dialog"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Textarea } from "@/components/ui/textarea"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { Sparkles, Loader2 } from "lucide-react"; import { useToast } from "@/hooks/use-toast"; import { lmsService } from "@/services/lms.service"; interface Props { type: "course" | "assignment" | "batch" | "rubric" | "exam" | "student" | "teacher"; trigger?: React.ReactNode; onGenerated?: (data: any) => void; } const typeLabels: Record = { course: "Course", assignment: "Assignment", batch: "Batch", rubric: "Rubric", exam: "Exam", student: "Student Plan", teacher: "Teacher Assignment", }; export default function AiCreationAssistant({ type, trigger, onGenerated }: Props) { const [open, setOpen] = useState(false); const [prompt, setPrompt] = useState(""); const [level, setLevel] = useState("b2"); const [subjectId, setSubjectId] = useState(""); const { toast } = useToast(); const generateCourseMutation = useMutation({ mutationFn: (payload: { title: string; subject_id?: number; level?: string }) => lmsService.aiGenerateCourse(payload), onError: (err: Error) => { toast({ variant: "destructive", title: "Generation failed", description: err.message || "Could not generate course outline.", }); }, }); const handleGenerate = () => { if (type !== "course") { toast({ variant: "destructive", title: "Not available", description: "Live AI generation is wired for courses only. Use the course type to generate an outline.", }); return; } const title = prompt.trim() || "Untitled course"; const sid = subjectId.trim() ? Number(subjectId) : undefined; generateCourseMutation.mutate({ title, ...(sid !== undefined && !Number.isNaN(sid) ? { subject_id: sid } : {}), level, }); }; const handleApply = () => { if (!generateCourseMutation.data) return; onGenerated?.(generateCourseMutation.data); toast({ title: `AI ${typeLabels[type]} Applied`, description: `The AI-generated ${type} has been applied to your form.`, }); setOpen(false); generateCourseMutation.reset(); }; return ( <> {trigger ? (
setOpen(true)}>{trigger}
) : ( )} { setOpen(v); if (!v) generateCourseMutation.reset(); }} > AI {typeLabels[type]} Generator {type === "course" && generateCourseMutation.isSuccess ? (

AI Generated {typeLabels[type]}

Outline
                    {typeof generateCourseMutation.data?.outline === "string"
                      ? generateCourseMutation.data.outline
                      : JSON.stringify(generateCourseMutation.data?.outline, null, 2)}
                  
) : (