import { useState } from "react"; import { useQuery } from "@tanstack/react-query"; import { TopAppBar } from "@/components/layout/top-app-bar"; import { Sidebar } from "@/components/layout/sidebar"; import { Card, CardHeader, CardTitle, CardContent, CardFooter, CardDescription, } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { useToast } from "@/hooks/use-toast"; import { useAuth } from "@/hooks/use-auth"; import { AlertCircle, DollarSign, ArrowDown, Upload, Image, X, Trash2, Save, } from "lucide-react"; import { Input } from "@/components/ui/input"; import { Checkbox } from "@/components/ui/checkbox"; import { Table, TableHeader, TableBody, TableRow, TableHead, TableCell, } from "@/components/ui/table"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter, } from "@/components/ui/dialog"; import PaymentsRecentTable from "@/components/payments/payments-recent-table"; import PaymentsOfPatientModal from "@/components/payments/payments-of-patient-table"; export default function PaymentsPage() { const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false); const [paymentPeriod, setPaymentPeriod] = useState("all-time"); const [uploadedImage, setUploadedImage] = useState(null); const [isExtracting, setIsExtracting] = useState(false); const [isDragging, setIsDragging] = useState(false); const [extractedPaymentData, setExtractedPaymentData] = useState([]); const [editableData, setEditableData] = useState([]); const { toast } = useToast(); const toggleMobileMenu = () => { setIsMobileMenuOpen(!isMobileMenuOpen); }; // Image upload handlers for OCR const handleImageDrop = (e: React.DragEvent) => { e.preventDefault(); e.stopPropagation(); setIsDragging(false); const files = e.dataTransfer.files; if (files && files[0]) { const file = files[0]; if (file.type.startsWith("image/")) { setUploadedImage(file); } else { toast({ title: "Invalid file type", description: "Please upload an image file (JPG, PNG, etc.)", variant: "destructive", }); } } }; const handleImageSelect = (e: React.ChangeEvent) => { const files = e.target.files; if (files && files[0]) { const file = files[0]; setUploadedImage(file); } }; const handleOCRExtraction = async (file: File) => { setIsExtracting(true); try { // Create FormData for image upload const formData = new FormData(); formData.append("image", file); // Simulate OCR extraction process await new Promise((resolve) => setTimeout(resolve, 2000)); } finally { setIsExtracting(false); } }; const removeUploadedImage = () => { setUploadedImage(null); }; const updateEditableData = ( index: number, field: string, value: string | number ) => { setEditableData((prev) => { const updated = [...prev]; updated[index] = { ...updated[index], [field]: value }; return updated; }); }; const deleteRow = (index: number) => { setEditableData((prev) => prev.filter((_, i) => i !== index)); toast({ title: "Row Deleted", description: `Payment record has been removed`, }); }; const saveRow = (index: number) => { toast({ title: "Row Saved", description: `Changes to payment record ${index + 1} have been saved`, }); }; return (
{/* Header */}

Payments

Manage patient payments and outstanding balances

{/* Payment Summary Cards */}
Outstanding Balance
$0

From 0 outstanding invoices

Payments Collected
${0}

From 0 completed payments

Pending Payments
$0

From 0 pending transactions

{/* OCR Image Upload Section - not working rn*/}

Payment Document OCR

{ e.preventDefault(); setIsDragging(true); }} onDragLeave={() => setIsDragging(false)} onClick={() => document.getElementById("image-upload-input")?.click() } > {uploadedImage ? (

{uploadedImage.name}

{(uploadedImage.size / 1024 / 1024).toFixed(2)} MB

{isExtracting && (
Extracting payment information...
)}
) : (

Upload Payment Document

Drag and drop an image or click to browse

Supported formats: JPG, PNG, GIF • Max size: 10MB

)}
{/* Recent Payments table */} Payment's Records View and manage all recents patient's claims payments {/* Recent Payments by Patients*/}
); }