import React, { useState, useEffect } from 'react'; import { Head, router, Link } from '@inertiajs/react'; import AdminLayout from '@/Layouts/AdminLayout'; import { Search, Filter, Download, Users, Mail, MapPin, Calendar, CheckCircle, Clock, XCircle, ExternalLink, MoreVertical, BadgeDollarSign, ShieldAlert, TrendingUp, AlertOctagon, Award, Edit2, Trash2, Check, Phone, ShieldCheck, Eye } from 'lucide-react'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@/components/ui/table'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Dialog, DialogContent, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Badge } from '@/components/ui/badge'; export default function EmployersIndex({ employers, filters = {} }) { const [searchTerm, setSearchTerm] = useState(filters.search || ''); const [statusFilter, setStatusFilter] = useState(filters.status || 'All'); const [locationFilter, setLocationFilter] = useState(filters.location || 'All'); const [sortField, setSortField] = useState(filters.sort_field || 'created_at'); const [sortOrder, setSortOrder] = useState(filters.sort_order || 'desc'); const formatDate = (dateStr) => { if (!dateStr) return 'N/A'; try { return new Date(dateStr).toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' }); } catch (e) { return dateStr; } }; const [selectedEmployer, setSelectedEmployer] = useState(null); const [isDetailsOpen, setIsDetailsOpen] = useState(false); const [isEditOpen, setIsEditOpen] = useState(false); const [editForm, setEditForm] = useState({ id: '', name: '', email: '', company_name: '', phone: '', country: '', subscription_status: 'none' }); // Handle search/filter queries const triggerSearch = (searchVal, statusVal, locationVal, sortF, sortO) => { router.get('/admin/employers', { search: searchVal, status: statusVal, location: locationVal, sort_field: sortF, sort_order: sortO }, { preserveState: true, preserveScroll: true, replace: true }); }; useEffect(() => { const delayDebounceFn = setTimeout(() => { if (searchTerm !== (filters.search || '')) { triggerSearch(searchTerm, statusFilter, locationFilter, sortField, sortOrder); } }, 500); return () => clearTimeout(delayDebounceFn); }, [searchTerm]); const handleFilterChange = (status, location) => { setStatusFilter(status); setLocationFilter(location); triggerSearch(searchTerm, status, location, sortField, sortOrder); }; const handleSort = (field) => { const order = sortField === field && sortOrder === 'desc' ? 'asc' : 'desc'; setSortField(field); setSortOrder(order); triggerSearch(searchTerm, statusFilter, locationFilter, field, order); }; const handleApprove = (id) => { router.post(`/admin/employers/${id}/verify`, {}, { onSuccess: () => { setIsDetailsOpen(false); } }); }; const handleSuspend = (id) => { router.post(`/admin/employers/${id}/suspend`, {}, { onSuccess: () => { setIsDetailsOpen(false); } }); }; const handleActivate = (id) => { router.post(`/admin/employers/${id}/activate`, {}, { onSuccess: () => { setIsDetailsOpen(false); } }); }; const handleDelete = (id) => { if (confirm('Are you absolutely sure you want to permanently delete this employer?')) { router.delete(`/admin/employers/${id}`); } }; const handleEditClick = (employer) => { setEditForm({ id: employer.id, name: employer.name, email: employer.email, company_name: employer.employer_profile?.company_name || '', phone: employer.employer_profile?.phone || '', country: employer.employer_profile?.country || 'UAE', subscription_status: employer.subscription_status || 'none' }); setIsEditOpen(true); }; const handleEditSubmit = (e) => { e.preventDefault(); router.post(`/admin/employers/${editForm.id}/update`, editForm, { onSuccess: () => { setIsEditOpen(false); } }); }; const handleExport = () => { const params = new URLSearchParams({ search: searchTerm, status: statusFilter, location: locationFilter, sort_field: sortField, sort_order: sortOrder }); window.location.href = `/admin/employers/export?${params.toString()}`; }; const viewDetails = (employer) => { setSelectedEmployer(employer); setIsDetailsOpen(true); }; return (
{/* Statistics Ribbons */}
Total Employers

{employers.total || 0}

Active Plans

{employers.data.filter(e => e.subscription_status === 'active').length}

Pending Approval

{employers.data.filter(e => e.employer_profile?.verification_status !== 'approved').length}

Suspended Accounts

{employers.data.filter(e => e.status === 'suspended').length}

{/* Search and Filters */}
setSearchTerm(e.target.value)} />
{/* Table */}
handleSort('name')} className="font-bold text-slate-500 text-[10px] uppercase tracking-widest h-14 pl-8 cursor-pointer select-none"> Employer {sortField === 'name' && (sortOrder === 'desc' ? '↓' : '↑')} Company Name Subscription Plan Verification Status handleSort('status')} className="font-bold text-slate-500 text-[10px] uppercase tracking-widest h-14 cursor-pointer select-none"> Status {sortField === 'status' && (sortOrder === 'desc' ? '↓' : '↑')} Action {employers.data.length > 0 ? ( employers.data.map((emp) => (
{emp.name?.charAt(0)}

{emp.name}

{emp.email}

{emp.employer_profile?.company_name || 'N/A'}
{emp.subscription_status || 'none'} {emp.employer_profile?.verification_status || 'pending'} {emp.status}
Quick Actions handleEditClick(emp)} >
Edit Employer
{emp.employer_profile?.verification_status !== 'approved' && ( handleApprove(emp.id)}>
Verify Employer
)} {emp.status === 'active' ? ( handleSuspend(emp.id)} className="p-3 rounded-lg focus:bg-rose-50 cursor-pointer text-rose-600 font-bold" >
Suspend Employer
) : ( handleActivate(emp.id)} className="p-3 rounded-lg focus:bg-emerald-50 cursor-pointer text-emerald-600 font-bold" >
Activate Employer
)} handleDelete(emp.id)} className="p-3 rounded-lg focus:bg-red-50 cursor-pointer text-red-600 font-bold" >
Delete Employer
)) ) : ( No employers found. )}
{/* Pagination */}
{employers.total > 0 ? ( `Showing ${employers.from || 0} to ${employers.to || 0} of ${employers.total} employers` ) : ( 'No employers found' )} {employers.last_page > 1 && (
Previous Next
)}
{/* Employer Detail Modal */}
{selectedEmployer?.name?.charAt(0)}

{selectedEmployer?.name}

📍 Registered {new Date(selectedEmployer?.created_at).toLocaleDateString()}

{/* Employer Info Card */}

Employer Profile

Company / Household {selectedEmployer?.employer_profile?.company_name || 'N/A'}
Email Address {selectedEmployer?.email || 'N/A'}
Phone Number {selectedEmployer?.employer_profile?.phone || 'N/A'}
Country / Location {selectedEmployer?.employer_profile?.country || 'United Arab Emirates'}
{/* Subscription Plan Card */}

Chosen Subscription Plan

Current Plan {selectedEmployer?.subscription_status === 'active' ? (selectedEmployer?.sponsor?.subscription_plan || 'Active Premium Plan') : 'No Active Plan'}
Payment Status {selectedEmployer?.sponsor?.payment_status || 'N/A'}
Plan Starts {formatDate(selectedEmployer?.sponsor?.subscription_start_date)}
Plan Expires {formatDate(selectedEmployer?.sponsor?.subscription_end_date)}
{/* Document Verification & OCR Extracted Details */}

Emirates ID & Document Extracted Details

Emirates ID Number {selectedEmployer?.employer_profile?.emirates_id_number || 'Not Extracted / Pending'}
Emirates ID Expiry {formatDate(selectedEmployer?.employer_profile?.emirates_id_expiry)}
Verification Status {selectedEmployer?.employer_profile?.verification_status || 'Pending'}
Trade License Expiry {formatDate(selectedEmployer?.sponsor?.license_expiry)}
{/* Edit Dialog */} Edit Employer Details
setEditForm({ ...editForm, name: e.target.value })} required />
setEditForm({ ...editForm, company_name: e.target.value })} />
setEditForm({ ...editForm, email: e.target.value })} required />
setEditForm({ ...editForm, phone: e.target.value })} />
); }