import React, { useMemo, useState, useEffect } from 'react'; import { marked } from 'marked'; import { useLanguage } from '../types'; import { jsPDF } from 'jspdf'; import html2canvas from 'html2canvas'; interface DocumentViewerModalProps { isOpen: boolean; onClose: () => void; versions: string[]; initialIndex?: number; title: string; } const DocumentViewerModal: React.FC = ({ isOpen, onClose, versions, initialIndex, title }) => { const { t } = useLanguage(); const [currentIndex, setCurrentIndex] = useState(initialIndex ?? (versions.length > 0 ? versions.length - 1 : 0)); useEffect(() => { if (isOpen) { setCurrentIndex(initialIndex ?? (versions.length > 0 ? versions.length - 1 : 0)); } }, [isOpen, initialIndex, versions.length]); const currentContent = versions[currentIndex] || ''; const parsedContent = useMemo(() => { if (!currentContent) return ''; return marked.parse(currentContent); }, [currentContent]); const handlePrint = () => { const printableContent = document.getElementById('printable-document-content'); if (printableContent) { const printWindow = window.open('', '_blank'); printWindow?.document.write(` ${title} ${printableContent.innerHTML} `); printWindow?.document.close(); printWindow?.print(); } }; const handleExportPdf = async () => { const element = document.querySelector('.document-page') as HTMLElement; if (!element) return; try { const canvas = await html2canvas(element, { scale: 2, useCORS: true, logging: false, backgroundColor: '#ffffff' }); const imgData = canvas.toDataURL('image/png'); const pdf = new jsPDF('p', 'mm', 'a4'); const imgProps = pdf.getImageProperties(imgData); const pdfWidth = pdf.internal.pageSize.getWidth(); const pdfHeight = (imgProps.height * pdfWidth) / imgProps.width; pdf.addImage(imgData, 'PNG', 0, 0, pdfWidth, pdfHeight); pdf.save(`${title || 'document'}_v${currentIndex + 1}.pdf`); } catch (error) { console.error('Error exporting PDF:', error); alert('خطا در دریافت خروجی PDF. لطفاً دوباره تلاش کنید.'); } }; const handleCopy = () => { navigator.clipboard.writeText(currentContent) .then(() => alert('متن با موفقیت کپی شد!')) .catch(err => alert('خطا در کپی کردن متن.')); }; const notaryPhone = useMemo(() => { const phone = t('footer.phone2'); const faDigits = '۰۱۲۳۴۵۶۷۸۹'; const enDigits = '0123456789'; let enPhone = ''; for (let char of phone) { const index = faDigits.indexOf(char); if (index > -1) { enPhone += enDigits[index]; } else if (enDigits.includes(char)) { enPhone += char; } } return '98' + enPhone.replace(/^0/, ''); }, [t]); const whatsappUrl = `https://api.whatsapp.com/send?phone=${notaryPhone}&text=${encodeURIComponent(currentContent)}`; if (!isOpen) return null; return (
e.stopPropagation()}>

{t('documentViewer.title')}

{title}

{versions.length > 1 && (
{t('documentViewer.version')} {currentIndex + 1} / {versions.length}
)}
Logo {t('documentViewer.headerTitle')}
{t('documentViewer.headerDate')}: {new Date().toLocaleDateString('fa-IR')}
{t('documentViewer.headerCaseNo')}: ............................
{t('documentViewer.sendToNotary')}
); }; export default DocumentViewerModal;