import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:provider/provider.dart'; import '../config/app_config.dart'; import '../providers/auth_provider.dart'; import '../theme/app_theme.dart'; class AppSidebar extends StatelessWidget { const AppSidebar({super.key}); static const _navItems = [ _NavItem(label: 'داشبورد', icon: Icons.dashboard_rounded, route: '/dashboard'), _NavItem(label: 'کاربران', icon: Icons.people_rounded, route: '/users'), _NavItem(label: 'گروه‌ها', icon: Icons.groups_rounded, route: '/groups'), ]; @override Widget build(BuildContext context) { final location = GoRouterState.of(context).matchedLocation; return Container( color: AppTheme.sidebarBg, child: Column( children: [ // ── Logo / Brand ────────────────────────────────────────────── Container( padding: const EdgeInsets.fromLTRB(20, 32, 20, 24), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( children: [ Container( width: 40, height: 40, decoration: BoxDecoration( color: AppTheme.primary, borderRadius: BorderRadius.circular(10), ), child: const Icon( Icons.radio_rounded, color: Colors.white, size: 22, ), ), const SizedBox(width: 12), const Text( 'NEDA', style: TextStyle( color: Colors.white, fontSize: 22, fontWeight: FontWeight.w800, letterSpacing: 1.5, ), ), ], ), const SizedBox(height: 6), const Text( 'پنل مدیریت', style: TextStyle( color: AppTheme.sidebarText, fontSize: 12, ), ), ], ), ), // ── Debug badge ─────────────────────────────────────────────── if (AppConfig.debugMode) Container( margin: const EdgeInsets.symmetric(horizontal: 16, vertical: 4), padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 5), decoration: BoxDecoration( color: AppTheme.warning.withValues(alpha: 0.15), borderRadius: BorderRadius.circular(6), border: Border.all(color: AppTheme.warning.withValues(alpha: 0.4)), ), child: const Row( children: [ Icon(Icons.bug_report_rounded, size: 14, color: AppTheme.warning), SizedBox(width: 6), Text( 'حالت آزمایشی', style: TextStyle( color: AppTheme.warning, fontSize: 11, fontWeight: FontWeight.w600, ), ), ], ), ), const SizedBox(height: 12), // ── Navigation items ────────────────────────────────────────── Expanded( child: ListView( padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 4), children: _navItems.map((item) { final isActive = location.startsWith(item.route) && (item.route != '/dashboard' || location == '/dashboard'); return _SidebarTile(item: item, isActive: isActive); }).toList(), ), ), // ── Admin info + Logout ─────────────────────────────────────── const Divider(color: Color(0xFF1E293B), height: 1), Padding( padding: const EdgeInsets.all(16), child: Column( children: [ Consumer( builder: (_, auth, __) => Row( children: [ Container( width: 36, height: 36, decoration: BoxDecoration( color: AppTheme.primary.withValues(alpha: 0.2), borderRadius: BorderRadius.circular(10), ), child: const Icon( Icons.admin_panel_settings_rounded, color: AppTheme.primary, size: 20, ), ), const SizedBox(width: 10), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( auth.username ?? 'Admin', style: const TextStyle( color: Colors.white, fontSize: 13, fontWeight: FontWeight.w600, ), overflow: TextOverflow.ellipsis, ), const Text( 'مدیر سیستم', style: TextStyle( color: AppTheme.sidebarText, fontSize: 11, ), ), ], ), ), ], ), ), const SizedBox(height: 12), SizedBox( width: double.infinity, child: OutlinedButton.icon( onPressed: () { context.read().logout(); context.go('/login'); }, icon: const Icon(Icons.logout_rounded, size: 16), label: const Text('خروج'), style: OutlinedButton.styleFrom( foregroundColor: AppTheme.sidebarText, side: const BorderSide(color: Color(0xFF334155)), padding: const EdgeInsets.symmetric(vertical: 10), ), ), ), ], ), ), ], ), ); } } class _SidebarTile extends StatelessWidget { final _NavItem item; final bool isActive; const _SidebarTile({required this.item, required this.isActive}); @override Widget build(BuildContext context) { return Container( margin: const EdgeInsets.symmetric(vertical: 2), decoration: BoxDecoration( color: isActive ? AppTheme.sidebarSelected : Colors.transparent, borderRadius: BorderRadius.circular(8), ), child: ListTile( leading: Icon( item.icon, color: isActive ? Colors.white : AppTheme.sidebarText, size: 20, ), title: Text( item.label, style: TextStyle( color: isActive ? Colors.white : AppTheme.sidebarText, fontSize: 14, fontWeight: isActive ? FontWeight.w600 : FontWeight.w400, ), ), contentPadding: const EdgeInsets.symmetric(horizontal: 12), dense: true, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)), onTap: () { context.go(item.route); // Close drawer if open if (Scaffold.of(context).isDrawerOpen) { Navigator.of(context).pop(); } }, ), ); } } class _NavItem { final String label; final IconData icon; final String route; const _NavItem({ required this.label, required this.icon, required this.route, }); }