'use client'; import { useEffect, useState } from 'react'; import { ArrowLeft, ArrowRight, Check, Download, Wand2 } from 'lucide-react'; import { useNavigation } from '@/lib/navigation'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { BackButton } from '@/components/common/BackButton'; interface Template { templateId: number; templateCode: string; title: string; category: string; } const CATS: Record = { labor:'แรงงาน', accounting:'บัญชี', contracts:'สัญญา', court:'ศาล', sso:'สปส.' }; const STEPS = [{n:1,label:'เลือกเทมเพลต'},{n:2,label:'กรอกข้อมูล'},{n:3,label:'ตรวจดู'},{n:4,label:'ดาวน์โหลด'}]; const DF = { company:'ห้างหุ้นส่วนจำกัด เผ่าปัญญา ทรานสปอร์ต', empName:'', empPosition:'', reason:'', date:new Date().toLocaleDateString('th-TH'), signerName:'', signerTitle:'' }; /** Resolve step badge class (extracted from nested ternary — SonarCloud S3358). */ function getStepBadgeClass(done: boolean, active: boolean): string { if (done) return 'bg-green-600 text-white'; if (active) return 'bg-navy text-white'; return 'bg-card-soft text-muted-foreground border border-border/60'; } export function PdfBuilderView({ initialTemplateId }: { readonly initialTemplateId?: number }) { const { navigate } = useNavigation(); const [step, setStep] = useState(initialTemplateId ? 2 : 1); const [templates, setTemplates] = useState([]); const [loading, setLoading] = useState(true); const [selectedId, setSelectedId] = useState(initialTemplateId || null); const [category, setCategory] = useState('all'); const [form, setForm] = useState(DF); const [pdfUrl, setPdfUrl] = useState(null); useEffect(() => { fetch('/api/templates') .then(r => r.json()) .then(d => { const data = d.data || []; // Map API fields to our interface (handle both camelCase and snake_case) const mapped = data.map((t: any) => ({ templateId: t.templateId || t.template_id, templateCode: t.templateCode || t.template_code, title: t.title, category: t.category, })); setTemplates(mapped); setLoading(false); }) .catch(() => setLoading(false)); }, []); const sf = (k: string, v: string) => setForm(f => ({ ...f, [k]: v })); const selected = templates.find(t => t.templateId === selectedId); const filtered = templates.filter(t => category === 'all' || t.category === category); return (
{/* Header + Stepper */}
PDF Builder

สร้างเอกสารกฎหมาย

{/* Stepper */}
{STEPS.map((s, i) => { const a = step === s.n; const d = step > s.n; return (
{d ? : s.n}
{s.label}
{i < STEPS.length - 1 &&
}
); })}
{/* Step 1: Template Picker */} {step === 1 && (
{['all', ...Object.keys(CATS)].map(c => ( ))}
{loading ? (
กำลังโหลด...
) : (
{filtered.map(t => ( ))}
)}
)} {/* Step 2: Fill Form */} {step === 2 && selected && (

กรอกข้อมูล

{selected.templateCode} — {selected.title}

sf('company', e.target.value)} className="w-full px-3 py-2 text-sm rounded-lg border border-border/50 bg-card-soft outline-none focus:border-gold/40" />
sf('date', e.target.value)} className="w-full px-3 py-2 text-sm rounded-lg border border-border/50 bg-card-soft outline-none focus:border-gold/40" />
sf('empName', e.target.value)} placeholder="นาย ก." className="w-full px-3 py-2 text-sm rounded-lg border border-border/50 bg-card-soft outline-none focus:border-gold/40" />
sf('empPosition', e.target.value)} className="w-full px-3 py-2 text-sm rounded-lg border border-border/50 bg-card-soft outline-none focus:border-gold/40" />
sf('reason', e.target.value)} className="w-full px-3 py-2 text-sm rounded-lg border border-border/50 bg-card-soft outline-none focus:border-gold/40" />
sf('signerName', e.target.value)} className="w-full px-3 py-2 text-sm rounded-lg border border-border/50 bg-card-soft outline-none focus:border-gold/40" />
sf('signerTitle', e.target.value)} className="w-full px-3 py-2 text-sm rounded-lg border border-border/50 bg-card-soft outline-none focus:border-gold/40" />
)} {/* Step 3: Preview */} {step === 3 && selected && (

ตรวจสอบก่อนดาวน์โหลด

{form.company}
{selected.templateCode}

{selected.title}

วันที่: {form.date}
{form.empName &&
พนักงาน: {form.empName}
} {form.empPosition &&
ตำแหน่ง: {form.empPosition}
} {form.reason &&
เหตุผล: {form.reason}
}
ผู้ลงนาม
{form.signerName}
{form.signerTitle}
)} {/* Step 4: Download */} {step === 4 && selected && (

เอกสารพร้อมดาวน์โหลด!

{selected.templateCode} — {selected.title}

{pdfUrl && ดาวน์โหลด PDF}
)}
); }