"use client" import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { faFilePdf, faChevronDown, faCheckCircle, faClock, faMoneyBillWave, faFileText, faChevronLeft, faChevronRight, faAngleDoubleLeft, faAngleDoubleRight, faSpinner } from '@fortawesome/free-solid-svg-icons'; import { useState } from 'react'; import documentsData from '@/data/documents.json'; import { useTranslation } from 'react-i18next'; import { getAccessToken } from '@/lib/auth'; import { downloadDocumentPDF } from '@/lib/pdf-generators'; interface TableCellProps { children: React.ReactNode; className?: string; } const TableCell = ({ children, className = "" }: TableCellProps) => ( {children} ); const StatusBadge = ({ status }: { status: string }) => { const { t } = useTranslation(); if (status === 'approved' || status === t('approved', 'Одобрено')) { return ( ); } if (status === 'pending') { return ( {t('pending', 'Во обработка')} ); } return ( ); }; const PriceBadge = ({ price }: { price: number }) => { const { t } = useTranslation(); if (price === 0) { return {t('free', '0,00')}; } return {price.toFixed(2)}; }; interface DocumentRecord { id: number; archive: string; date: string; request: string; price: number; paid: string; document: string; payOnline: boolean; status: string; comment: string; } export default function DocumentsPage() { const [selectedDocumentType, setSelectedDocumentType] = useState("select_document"); const [isDropdownOpen, setIsDropdownOpen] = useState(false); const [comment, setComment] = useState(""); const [currentPage, setCurrentPage] = useState(1); const [recordsPerPage, setRecordsPerPage] = useState(15); const [downloadingId, setDownloadingId] = useState(null); const [documents, setDocuments] = useState(documentsData.documents as DocumentRecord[]); const [isSubmitting, setIsSubmitting] = useState(false); const { t } = useTranslation(); const handleDownload = async (docId: number, request: string, archive: string, date: string) => { const token = getAccessToken(); if (!token) { alert(t('not_authenticated', 'Не сте најавени. Ве молиме најавете се повторно.')); return; } setDownloadingId(docId); try { await downloadDocumentPDF(request, archive, date, token); } catch (err) { console.error('PDF generation error:', err); alert(t('pdf_error', 'Грешка при генерирање на документот. Обидете се повторно.')); } finally { setDownloadingId(null); } }; const handleSubmit = () => { if (selectedDocumentType === "select_document") return; const docType = documentsData.documentTypes.find(d => d.id === selectedDocumentType); if (!docType) return; setIsSubmitting(true); // Generate archive number (random 5-digit) const archiveNumber = String(90000 + Math.floor(Math.random() * 10000)); // Current date in DD.MM.YYYY format const now = new Date(); const dateStr = `${String(now.getDate()).padStart(2, '0')}.${String(now.getMonth() + 1).padStart(2, '0')}.${now.getFullYear()}`; const newDoc: DocumentRecord = { id: documents.length > 0 ? Math.max(...documents.map(d => d.id)) + 1 : 1, archive: archiveNumber, date: dateStr, request: docType.name, price: docType.price, paid: "Не", document: "Преземи", payOnline: docType.price > 0, status: "pending", comment: comment, }; setDocuments(prev => [newDoc, ...prev]); setSelectedDocumentType("select_document"); setComment(""); setIsSubmitting(false); alert(t('document_submitted', 'Барањето за документ е успешно поднесено!')); }; const selectedDocument = documentsData.documentTypes.find(d => d.id === selectedDocumentType); const { paymentInfo } = documentsData; const totalPages = Math.ceil(documents.length / recordsPerPage); const startIndex = (currentPage - 1) * recordsPerPage; const endIndex = startIndex + recordsPerPage; const currentDocuments = documents.slice(startIndex, endIndex); return (
{/* Header */}

{t('documents')}

{t('documents_overview', 'Преглед на вашите документи и нивниот статус.')}

{/* Document Request Form */}

{t('new_document_request', 'Ново барање за документ')}

{/* Document Type Selection */}
{isDropdownOpen && (
{documentsData.documentTypes.map((docType) => ( ))}
)}
{/* Comment Section */}