'use client'; import { useState } from 'react'; import { Shield, Plus, Search, X, Edit, Trash2, Copy, CheckCircle, XCircle, Eye } from 'lucide-react'; interface Permission { module: string; view: boolean; create: boolean; edit: boolean; delete: boolean; } interface Role { id: string; name: string; description: string; isDefault: boolean; permissions: Permission[]; } const defaultPermissions: Permission[] = [ { module: 'Dashboard', view: true, create: false, edit: false, delete: false }, { module: 'KYC', view: false, create: false, edit: false, delete: false }, { module: 'Rentals', view: false, create: false, edit: false, delete: false }, { module: 'Bikers', view: false, create: false, edit: false, delete: false }, { module: 'Investors', view: false, create: false, edit: false, delete: false }, { module: 'Fleet', view: false, create: false, edit: false, delete: false }, { module: 'Merchants', view: false, create: false, edit: false, delete: false }, { module: 'Swap Stations', view: false, create: false, edit: false, delete: false }, { module: 'Hubs', view: false, create: false, edit: false, delete: false }, { module: 'Maintenance', view: false, create: false, edit: false, delete: false }, { module: 'Accounting', view: false, create: false, edit: false, delete: false }, { module: 'Reports', view: false, create: false, edit: false, delete: false }, { module: 'Users', view: false, create: false, edit: false, delete: false }, ]; const mockRoles: Role[] = [ { id: 'ROLE-001', name: 'Admin', description: 'Full system access with all permissions', isDefault: false, permissions: defaultPermissions.map(p => ({ ...p, view: true, create: true, edit: true, delete: true })) }, { id: 'ROLE-002', name: 'Manager', description: 'Management access with limited delete permissions', isDefault: false, permissions: defaultPermissions.map(p => ({ module: p.module, view: true, create: ['Dashboard', 'Reports'].includes(p.module) ? false : true, edit: ['Dashboard', 'Users'].includes(p.module) ? false : true, delete: false })) }, { id: 'ROLE-003', name: 'Biker', description: 'Limited access for bike riders', isDefault: false, permissions: defaultPermissions.map(p => ({ module: p.module, view: ['Dashboard', 'Fleet', 'Rentals'].includes(p.module), create: p.module === 'Rentals', edit: false, delete: false })) }, { id: 'ROLE-004', name: 'Investor', description: 'Access for investors to view portfolio', isDefault: false, permissions: defaultPermissions.map(p => ({ module: p.module, view: ['Dashboard', 'Portfolio', 'Withdraw'].includes(p.module), create: p.module === 'Withdraw', edit: false, delete: false })) }, { id: 'ROLE-005', name: 'Shop', description: 'Access for shop owners', isDefault: false, permissions: defaultPermissions.map(p => ({ module: p.module, view: ['Dashboard', 'Fleet', 'Deliveries'].includes(p.module), create: p.module === 'Deliveries', edit: p.module === 'Deliveries', delete: false })) }, { id: 'ROLE-006', name: 'Merchant', description: 'Access for merchants', isDefault: true, permissions: defaultPermissions.map(p => ({ module: p.module, view: ['Dashboard', 'Deliveries'].includes(p.module), create: false, edit: ['Deliveries'].includes(p.module), delete: false })) }, ]; const allModules = ['Dashboard', 'KYC', 'Rentals', 'Bikers', 'Investors', 'Fleet', 'Merchants', 'Swap Stations', 'Hubs', 'Maintenance', 'Accounting', 'Reports', 'Users', 'Portfolio', 'Withdraw', 'Deliveries']; export default function RolesPage() { const [roles, setRoles] = useState(mockRoles); const [search, setSearch] = useState(''); const [showCreateModal, setShowCreateModal] = useState(false); const [editingRole, setEditingRole] = useState(null); const [selectedRole, setSelectedRole] = useState(null); const [formData, setFormData] = useState({ name: '', description: '', }); const filteredRoles = roles.filter(r => r.name.toLowerCase().includes(search.toLowerCase()) || r.description.toLowerCase().includes(search.toLowerCase()) ); const handleSave = () => { if (!formData.name) return; if (editingRole) { setRoles(roles.map(r => r.id === editingRole.id ? { ...r, ...formData, isDefault: false } : r)); } else { const newRole: Role = { id: `ROLE-${String(roles.length + 1).padStart(3, '0')}`, ...formData, isDefault: false, permissions: defaultPermissions.map(p => ({ ...p, view: false, create: false, edit: false, delete: false })) }; setRoles([...roles, newRole]); } setShowCreateModal(false); setEditingRole(null); setFormData({ name: '', description: '' }); }; const handleDelete = (id: string) => { if (confirm('Are you sure you want to delete this role?')) { setRoles(roles.filter(r => r.id !== id)); setSelectedRole(null); } }; const handleDuplicate = (role: Role) => { const newRole: Role = { id: `ROLE-${String(roles.length + 1).padStart(3, '0')}`, name: `${role.name} (Copy)`, description: role.description, isDefault: false, permissions: role.permissions.map(p => ({ ...p })) }; setRoles([...roles, newRole]); }; const openEdit = (role: Role) => { setEditingRole(role); setFormData({ name: role.name, description: role.description }); setShowCreateModal(true); }; const togglePermission = (moduleIndex: number, action: 'view' | 'create' | 'edit' | 'delete') => { if (!selectedRole) return; const updated = [...selectedRole.permissions]; updated[moduleIndex][action] = !updated[moduleIndex][action]; setSelectedRole({ ...selectedRole, permissions: updated }); setRoles(roles.map(r => r.id === selectedRole.id ? { ...selectedRole, permissions: updated } : r)); }; const getPermissionCount = (role: Role, action: keyof Permission) => { return role.permissions.filter(p => p[action] === true).length; }; return (

Roles & Permissions

Manage roles and access permissions

{roles.length}

Total Roles

{roles.filter(r => r.isDefault).length}

Default Roles

{roles.reduce((a, r) => a + getPermissionCount(r, 'create'), 0)}

Total Create Perms

{roles.reduce((a, r) => a + getPermissionCount(r, 'view'), 0)}

Total View Perms

setSearch(e.target.value)} className="w-full pl-10 pr-4 py-2 border border-slate-200 rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-accent focus:border-transparent" />
{filteredRoles.map(role => (
setSelectedRole(role)} >

{role.name}

{role.description}

{role.isDefault && ( Default )}
{getPermissionCount(role, 'view')} view {getPermissionCount(role, 'create')} create {getPermissionCount(role, 'edit')} edit {getPermissionCount(role, 'delete')} delete
))}
{selectedRole ? ( <>

{selectedRole.name}

{selectedRole.description}

{!selectedRole.isDefault && ( )}

Permissions

Check all view Check all create Check all edit Check all delete
{selectedRole.permissions.map((perm, i) => ( ))}
Module View Create Edit Delete
{perm.module}
) : (

Select a role to view and edit permissions

)}
{showCreateModal && (

{editingRole ? 'Edit Role' : 'Create New Role'}

setFormData({ ...formData, name: e.target.value })} className="w-full px-3 py-2 border border-slate-200 rounded-lg text-sm mt-1" placeholder="e.g., Super Manager" />