"use client" import * as React from "react" import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription } from "@/components/ui/dialog" import { Button } from "@/components/ui/button" import { Badge } from "@/components/ui/badge" import { Separator } from "@/components/ui/separator" import { Eye, Download, Loader2, FileText, RefreshCw, Settings } from "lucide-react" import { toast } from "sonner" import { type GtcClauseTreeView } from "@/db/schema/gtc" import { ClausePreviewViewer } from "./clause-preview-viewer" interface PreviewDocumentDialogProps extends React.ComponentPropsWithRef { clauses: GtcClauseTreeView[] document: any onExport?: () => void } export function PreviewDocumentDialog({ clauses, document, onExport, ...props }: PreviewDocumentDialogProps) { const [isGenerating, setIsGenerating] = React.useState(false) const [documentGenerated, setDocumentGenerated] = React.useState(false) const [viewerInstance, setViewerInstance] = React.useState(null) // 조항 통계 계산 const stats = React.useMemo(() => { const activeClausesCount = clauses.filter(c => c.isActive !== false).length const topLevelCount = clauses.filter(c => !c.parentId && c.isActive !== false).length const hasContentCount = clauses.filter(c => c.content && c.isActive !== false).length return { total: activeClausesCount, topLevel: topLevelCount, withContent: hasContentCount, withoutContent: activeClausesCount - hasContentCount } }, [clauses]) const handleGeneratePreview = async () => { setIsGenerating(true) try { // 잠시 후 문서 생성 완료로 설정 (실제로는 뷰어에서 처리) setTimeout(() => { setDocumentGenerated(true) setIsGenerating(false) toast.success("문서 미리보기가 생성되었습니다.") }, 1500) } catch (error) { setIsGenerating(false) toast.error("문서 생성 중 오류가 발생했습니다.") } } const handleExportDocument = () => { if (viewerInstance) { // PDFTron의 다운로드 기능 실행 viewerInstance.UI.downloadPdf({ filename: `${document?.title || 'GTC계약서'}_미리보기.pdf` }) toast.success("문서가 다운로드됩니다.") } } const handleRegenerateDocument = () => { setDocumentGenerated(false) handleGeneratePreview() } React.useEffect(() => { // 다이얼로그가 열릴 때 자동으로 미리보기 생성 if (props.open && !documentGenerated && !isGenerating) { handleGeneratePreview() } }, [props.open]) return ( 문서 미리보기 현재 조항들을 기반으로 생성된 문서를 미리보기합니다. {/* 문서 정보 및 통계 */}
{document?.title || 'GTC 계약서'} {stats.total}개 조항
{documentGenerated && ( <> )}
{stats.total}
총 조항
{stats.topLevel}
최상위 조항
{stats.withContent}
내용 있음
{stats.withoutContent}
제목만
{/* PDFTron 뷰어 영역 */}
{isGenerating ? (

문서 생성 중...

{stats.total}개의 조항을 배치하고 있습니다.

) : documentGenerated ? ( ) : (

문서 미리보기 준비 중

)}
) }