import React, { useState, Fragment } from 'react' import DashboardLayout from '@/components/layout/DashboardLayout' import { useSession } from 'next-auth/react' import { MagnifyingGlassIcon, FunnelIcon, EllipsisHorizontalIcon, PhoneIcon, EnvelopeIcon, MapPinIcon, IdentificationIcon, BuildingOfficeIcon, BanknotesIcon, ArrowDownTrayIcon, XMarkIcon, CheckCircleIcon, XCircleIcon, ChartBarIcon, ClockIcon, DocumentTextIcon, } from '@heroicons/react/24/outline' import { Menu, Transition, Dialog } from '@headlessui/react' type BusinessType = 'Retail' | 'Agriculture' | 'Transport' | 'Manufacturing' | 'Services' | 'Technology' type ClientStatus = 'Active' | 'Defaulted' | 'Pending Review' | 'Blacklisted' | 'Completed' interface Client { id: string name: string nationalId: string businessName: string businessType: BusinessType businessLocation: string email: string phone: string status: ClientStatus joinDate: string activeLoans: number totalBorrowed: number totalRepaid: number creditScore: number guarantors: string[] mpesaStatements: boolean bankStatements: boolean businessRegistration: boolean collateral?: { type: string value: number description: string } } const sampleClients: Client[] = [ { id: 'C001', name: 'Wanjiku Kamau', nationalId: '24891234', businessName: 'Kamau Fresh Produce', businessType: 'Agriculture', businessLocation: 'Nyeri Town, Nyeri', email: 'wanjiku@gmail.com', phone: '+254 712 345 678', status: 'Active', joinDate: '2024-01-15', activeLoans: 1, totalBorrowed: 250000, totalRepaid: 150000, creditScore: 85, guarantors: ['John Mwangi', 'Grace Njeri'], mpesaStatements: true, bankStatements: true, businessRegistration: true, collateral: { type: 'Land', value: 1000000, description: '2 Acres Agricultural Land in Nyeri' } }, { id: 'C002', name: 'Odhiambo Otieno', nationalId: '29876543', businessName: 'Quick Shuttle Services', businessType: 'Transport', businessLocation: 'Kisumu CBD', email: 'odhiambo@yahoo.com', phone: '+254 722 987 654', status: 'Active', joinDate: '2024-02-01', activeLoans: 2, totalBorrowed: 500000, totalRepaid: 200000, creditScore: 75, guarantors: ['Peter Ouko', 'Sarah Akinyi'], mpesaStatements: true, bankStatements: true, businessRegistration: true, collateral: { type: 'Vehicle', value: 800000, description: '2020 Toyota Hiace' } }, { id: 'C003', name: 'Amina Hassan', nationalId: '31234567', businessName: 'Amina Beauty Shop', businessType: 'Retail', businessLocation: 'Mombasa Road, Nairobi', email: 'amina.hassan@gmail.com', phone: '+254 733 123 456', status: 'Pending Review', joinDate: '2024-02-10', activeLoans: 0, totalBorrowed: 0, totalRepaid: 0, creditScore: 70, guarantors: ['Fatuma Ali'], mpesaStatements: true, bankStatements: false, businessRegistration: true }, { id: 'C004', name: 'Kipchoge Kiprotich', nationalId: '27654321', businessName: 'Tech Solutions Kenya', businessType: 'Technology', businessLocation: 'Westlands, Nairobi', email: 'kipchoge@techsolutions.co.ke', phone: '+254 755 789 012', status: 'Defaulted', joinDate: '2023-08-15', activeLoans: 1, totalBorrowed: 300000, totalRepaid: 100000, creditScore: 45, guarantors: ['William Ruto', 'David Kimani'], mpesaStatements: true, bankStatements: true, businessRegistration: true }, { id: 'C005', name: 'Njeri Muthoni', nationalId: '25789012', businessName: 'Njeri Cereals & Supplies', businessType: 'Retail', businessLocation: 'Nakuru Town', email: 'njeri.muthoni@yahoo.com', phone: '+254 745 678 901', status: 'Completed', joinDate: '2023-06-20', activeLoans: 0, totalBorrowed: 450000, totalRepaid: 450000, creditScore: 92, guarantors: ['James Kariuki', 'Mary Wangari'], mpesaStatements: true, bankStatements: true, businessRegistration: true, collateral: { type: 'Commercial Property', value: 2000000, description: 'Shop Space in Nakuru CBD' } } ] const statusColors: Record = { 'Active': 'bg-green-100 text-green-800', 'Defaulted': 'bg-red-100 text-red-800', 'Pending Review': 'bg-yellow-100 text-yellow-800', 'Blacklisted': 'bg-gray-100 text-gray-800', 'Completed': 'bg-blue-100 text-blue-800' } const businessTypeIcons: Record = { 'Retail': BuildingOfficeIcon, 'Agriculture': BuildingOfficeIcon, 'Transport': BuildingOfficeIcon, 'Manufacturing': BuildingOfficeIcon, 'Services': BuildingOfficeIcon, 'Technology': BuildingOfficeIcon } interface ClientModalProps { client: Client isOpen: boolean onClose: () => void } const ClientModal: React.FC = ({ client, isOpen, onClose }) => { const [activeTab, setActiveTab] = useState<'info' | 'loans' | 'documents'>('info') const downloadDocument = (documentType: string) => { // TODO: Implement actual document download console.log(`Downloading ${documentType} for client ${client.id}`) } return ( ) } export default function ClientsPage() { const { data: session, status } = useSession() const [searchTerm, setSearchTerm] = useState('') const [selectedStatus, setSelectedStatus] = useState<'all' | ClientStatus>('all') const [selectedBusinessType, setSelectedBusinessType] = useState<'all' | BusinessType>('all') const [selectedClient, setSelectedClient] = useState(null) if (status === 'loading') { return
Loading...
} if (!session) { return null } const filteredClients = sampleClients.filter(client => { const matchesSearch = client.name.toLowerCase().includes(searchTerm.toLowerCase()) || client.businessName.toLowerCase().includes(searchTerm.toLowerCase()) || client.nationalId.includes(searchTerm) || client.phone.includes(searchTerm) const matchesStatus = selectedStatus === 'all' || client.status === selectedStatus const matchesType = selectedBusinessType === 'all' || client.businessType === selectedBusinessType return matchesSearch && matchesStatus && matchesType }) return (

Client Management

Manage client information, loan history, and documentation.

{/* Filters and Search */}
setSearchTerm(e.target.value)} />
{/* Clients Table */}
{filteredClients.map((client) => ( setSelectedClient(client)} className="cursor-pointer hover:bg-gray-50" > ))}
Client Information Business Details Loan Status Documentation Actions
{client.name}
ID: {client.nationalId}
{client.phone}
{client.email}
{client.businessName}
{client.businessType}
{client.businessLocation}
{client.status}
Active Loans: {client.activeLoans}
Total Borrowed: KES {client.totalBorrowed.toLocaleString()}
Total Repaid: KES {client.totalRepaid.toLocaleString()}
Credit Score: {client.creditScore}
M-PESA Statements
Bank Statements
Business Registration
Open options
{({ active }) => ( View Profile )} {({ active }) => ( New Loan Application )} {({ active }) => ( View Documents )} {({ active }) => ( Payment History )} {({ active }) => ( Mark as Defaulted )}
{/* Client Modal */} {selectedClient && ( setSelectedClient(null)} /> )}
) }