import 'package:e_receipt_mobile/domain/entities/login_user.dart'; import 'package:e_receipt_mobile/presentation/auth/session_controller.dart'; import 'package:e_receipt_mobile/presentation/home/home_view_model.dart'; import 'package:e_receipt_mobile/presentation/login/login_page.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; class HomeScreen extends ConsumerWidget { const HomeScreen({required this.user, super.key}); final LoginUser user; @override Widget build(BuildContext context, WidgetRef ref) { final merchantsAsync = ref.watch(merchantListProvider); return Scaffold( appBar: AppBar( title: Text("Merchants"), centerTitle: true, ), drawer: Drawer( child: SafeArea( child: Column( children: [ UserAccountsDrawerHeader( accountName: Text(user.username), accountEmail: Text('Role: ${user.role}'), currentAccountPicture: CircleAvatar( child: Text( (user.username.isNotEmpty ? user.username[0] : 'U') .toUpperCase(), ), ), ), ListTile( leading: const Icon(Icons.person_outline), title: const Text('Profile'), onTap: () { Navigator.of(context).pop(); _showProfile(context); }, ), ListTile( leading: const Icon(Icons.storefront_outlined), title: const Text('Merchants'), onTap: () => Navigator.of(context).pop(), ), ListTile( leading: const Icon(Icons.analytics_outlined), title: const Text('Reports'), onTap: () { Navigator.of(context).pop(); _showComingSoon(context, 'Reports'); }, ), ListTile( leading: const Icon(Icons.settings_outlined), title: const Text('Settings'), onTap: () { Navigator.of(context).pop(); _showComingSoon(context, 'Settings'); }, ), ListTile( leading: const Icon(Icons.help_outline), title: const Text('Help'), onTap: () { Navigator.of(context).pop(); _showComingSoon(context, 'Help'); }, ), const Spacer(), const Divider(height: 1), ListTile( leading: const Icon(Icons.logout), title: const Text('Logout'), onTap: () { ref.read(sessionControllerProvider.notifier).clearUser(); Navigator.of(context).pushAndRemoveUntil( MaterialPageRoute( builder: (_) => const LoginPage(), ), (route) => false, ); }, ), ], ), ), ), body: Padding( padding: const EdgeInsets.all(16), child: merchantsAsync.when( loading: () => const Center(child: CircularProgressIndicator()), error: (error, _) => Center( child: Text('Failed to load merchants: $error'), ), data: (merchants) { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( 'Total (${merchants.length})', style: Theme.of(context).textTheme.titleLarge, ), const SizedBox(height: 8), Expanded( child: merchants.isEmpty ? const Center(child: Text('No merchants found')) : ListView.separated( itemCount: merchants.length, separatorBuilder: (_, __) => const SizedBox(height: 10), itemBuilder: (context, index) { final merchant = merchants[index]; return Card( elevation: 2, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12), ), child: Padding( padding: const EdgeInsets.all(12), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( '${index + 1}. ${merchant.name ?? '-'}', style: Theme.of(context) .textTheme .titleMedium, ), const SizedBox(height: 6), Text( merchant.address ?? '-', style: Theme.of(context) .textTheme .bodyMedium, ), ], ), ), ); }, ), ), ], ); }, ), ), ); } void _showComingSoon(BuildContext context, String feature) { ScaffoldMessenger.of( context, ).showSnackBar(SnackBar(content: Text('$feature is coming soon'))); } void _showProfile(BuildContext context) { showDialog( context: context, builder: (context) { return AlertDialog( title: const Text('Profile'), content: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ Text('Username: ${user.username}'), const SizedBox(height: 8), Text('Role: ${user.role}'), ], ), actions: [ TextButton( onPressed: () => Navigator.of(context).pop(), child: const Text('Close'), ), ], ); }, ); } }