import { Button } from "@pram/ui/components/button"; import { Card, CardContent, CardHeader, CardTitle } from "@pram/ui/components/card"; import { MaterialIcon } from "@/components/ui/MaterialIcon"; import { EXAM_TYPES, SECTIONS } from "@/lib/generate-constants"; interface TestBlueprintCardProps { examType: string; selectedSections: string[]; selectedFormats: string[]; questionCount: number; weaknessAlign: number; mode: "quick" | "agentic"; setMode: (mode: "quick" | "agentic") => void; activeCount: number; maxParallel: number; generatePending: boolean; hasKey: boolean; error: string | null; onGenerate: () => void; disableQuick?: boolean; } export function TestBlueprintCard({ examType, selectedSections, selectedFormats, questionCount, weaknessAlign, mode, setMode, activeCount, maxParallel, generatePending, hasKey, error, onGenerate, onDismissError, disableQuick, }: TestBlueprintCardProps & { onDismissError?: () => void }) { const sectionNames = selectedSections .map((id) => SECTIONS.find((s) => s.id === id)?.name) .filter(Boolean); return (
Test Blueprint
Ujian {EXAM_TYPES.find((t) => t.id === examType)?.name}
Section {sectionNames.join(" + ")}
Jumlah Soal {questionCount} Soal
Format {selectedFormats.length} Jenis
Estimasi Durasi {questionCount * 2} Menit
{/* AI Confidence Score */}
AI Confidence Score
{Math.round(weaknessAlign)}%

Probabilitas tinggi untuk mengatasi blindspot linguistik utama.

{/* Mode Toggle */}
{disableQuick && (

Reading/Writing membutuhkan Agentic mode (min 20 soal)

)} {mode === "agentic" && (
Mode Agentic

Multi-step validation: passage → validate → questions → self-check → quality score. Lebih lambat tapi kualitas lebih terjamin.

)} {/* Primary CTA */} {error && (
{error} {onDismissError && ( )}
)}
); }