import React, { useEffect, useState } from 'react'; import api from '../../utils/api'; import { Card } from '../../components/ui/card'; import { Button } from '../../components/ui/button'; import { Badge } from '../../components/ui/badge'; import { Input } from '../../components/ui/input'; import { Label } from '../../components/ui/label'; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '../../components/ui/dialog'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '../../components/ui/select'; import { toast } from 'sonner'; import { DollarSign, Plus, Edit, Trash2, ExternalLink, TrendingUp } from 'lucide-react'; const AdminFinancials = () => { const [reports, setReports] = useState([]); const [loading, setLoading] = useState(true); const [dialogOpen, setDialogOpen] = useState(false); const [deleteDialogOpen, setDeleteDialogOpen] = useState(false); const [selectedReport, setSelectedReport] = useState(null); const [reportToDelete, setReportToDelete] = useState(null); const [uploadedFile, setUploadedFile] = useState(null); const [formData, setFormData] = useState({ year: new Date().getFullYear(), title: '', document_url: '', document_type: 'google_drive' }); const [submitting, setSubmitting] = useState(false); useEffect(() => { fetchReports(); }, []); const fetchReports = async () => { try { const response = await api.get('/financials'); setReports(response.data); } catch (error) { toast.error('Failed to fetch financial reports'); } finally { setLoading(false); } }; const handleCreate = () => { setSelectedReport(null); setFormData({ year: new Date().getFullYear(), title: '', document_url: '', document_type: 'google_drive' }); setDialogOpen(true); }; const handleEdit = (report) => { setSelectedReport(report); setFormData({ year: report.year, title: report.title, document_url: report.document_url, document_type: report.document_type }); setDialogOpen(true); }; const handleDelete = (report) => { setReportToDelete(report); setDeleteDialogOpen(true); }; const handleSubmit = async (e) => { e.preventDefault(); setSubmitting(true); try { const formDataToSend = new FormData(); formDataToSend.append('year', formData.year); formDataToSend.append('title', formData.title); formDataToSend.append('document_type', formData.document_type); // Handle file upload or URL based on document_type if (formData.document_type === 'upload') { if (!uploadedFile && !selectedReport) { toast.error('Please select a file to upload'); setSubmitting(false); return; } if (uploadedFile) { formDataToSend.append('file', uploadedFile); } } else { formDataToSend.append('document_url', formData.document_url); } if (selectedReport) { await api.put(`/admin/financials/${selectedReport.id}`, formDataToSend); toast.success('Financial report updated successfully'); } else { await api.post('/admin/financials', formDataToSend); toast.success('Financial report created successfully'); } setDialogOpen(false); setUploadedFile(null); fetchReports(); } catch (error) { toast.error(error.response?.data?.detail || 'Failed to save financial report'); } finally { setSubmitting(false); } }; const confirmDelete = async () => { try { await api.delete(`/admin/financials/${reportToDelete.id}`); toast.success('Financial report deleted successfully'); setDeleteDialogOpen(false); fetchReports(); } catch (error) { toast.error('Failed to delete financial report'); } }; if (loading) { return (

Loading financial reports...

); } return (
{/* Header */}

Financial Reports Management

Manage annual financial reports

{/* Reports List */} {reports.length === 0 ? (

No financial reports yet

) : (
{reports.map(report => (
{report.year}

{report.title}

{report.document_type === 'google_drive' ? 'Google Drive' : report.document_type.toUpperCase()}
))}
)} {/* Create/Edit Dialog */} {selectedReport ? 'Edit Financial Report' : 'Add Financial Report'} {selectedReport ? 'Update financial report information' : 'Add a new financial report'}
setFormData({ ...formData, year: parseInt(e.target.value) })} placeholder="2024" required min="2000" max="2100" />
setFormData({ ...formData, title: e.target.value })} placeholder="2024 Annual Financial Report" required />
{formData.document_type === 'upload' ? (
setUploadedFile(e.target.files[0])} required={!selectedReport} /> {uploadedFile && (

Selected: {uploadedFile.name}

)}
) : (
setFormData({ ...formData, document_url: e.target.value })} placeholder="https://drive.google.com/file/d/..." required />

{formData.document_type === 'google_drive' && 'Paste the shareable link to your Google Drive file'} {formData.document_type === 'pdf' && 'Paste the URL to your PDF file'}

)}
{/* Delete Confirmation Dialog */} Delete Financial Report Are you sure you want to delete "{reportToDelete?.title}"? This action cannot be undone.
); }; export default AdminFinancials;