import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../../../core/utils/formatters.dart'; import '../../../../shared/widgets/app_button.dart'; import '../../../../shared/widgets/app_text_field.dart'; import '../../domain/entities/app_settings.dart'; import '../providers/settings_provider.dart'; import '../widgets/settings_widgets.dart'; import '../../../../shared/widgets/app_toast.dart'; class GeneralSettingsScreen extends ConsumerStatefulWidget { const GeneralSettingsScreen({super.key}); @override ConsumerState createState() => _GeneralSettingsScreenState(); } class _GeneralSettingsScreenState extends ConsumerState { final _formKey = GlobalKey(); late final TextEditingController _defaultBranchController; late final TextEditingController _branchCodeFormatController; late String _timeZone; late String _language; late String _currency; late String _timeFormat; late String _numberFormat; @override void initState() { super.initState(); final general = ref.read(appSettingsProvider).general; _defaultBranchController = TextEditingController(text: general.defaultBranch); _branchCodeFormatController = TextEditingController(text: general.branchCodeFormat); _timeZone = general.timeZone; _language = general.language; _currency = general.currency; _timeFormat = general.timeFormat; _numberFormat = general.numberFormat; } @override void dispose() { _defaultBranchController.dispose(); _branchCodeFormatController.dispose(); super.dispose(); } Future _save() async { if (!_formKey.currentState!.validate()) return; await ref.read(appSettingsProvider.notifier).updateGeneral( GeneralSettings( defaultBranch: _defaultBranchController.text.trim(), branchCodeFormat: _branchCodeFormatController.text.trim(), timeZone: _timeZone, language: _language, currency: _currency, dateFormat: DateFormatter.displayDatePattern, timeFormat: _timeFormat, numberFormat: _numberFormat, ), ); if (mounted) { showAppToastFromSnackBar(context, const SnackBar(content: Text('General settings saved')), ); } } @override Widget build(BuildContext context) { return SettingsPageLayout( title: 'General Settings', subtitle: 'Regional preferences and branch defaults', child: Form( key: _formKey, child: Column( children: [ SettingsFormCard( title: 'Branch Settings', subtitle: 'Default branch and code format', children: [ AppTextField( controller: _defaultBranchController, label: 'Default Branch', ), const SizedBox(height: 16), AppTextField( controller: _branchCodeFormatController, label: 'Branch Code Format', hint: 'BR-{000}', ), ], ), const SizedBox(height: 16), SettingsFormCard( title: 'Regional Settings', subtitle: 'Time zone, language, currency, and formats', children: [ SettingsDropdownField( label: 'Time Zone', value: _timeZone, items: const [ 'Asia/Kolkata', 'Asia/Dubai', 'Europe/London', 'America/New_York', ], itemLabel: (v) => v, onChanged: (v) => setState(() => _timeZone = v!), ), const SizedBox(height: 16), SettingsDropdownField( label: 'Language', value: _language, items: const ['en', 'hi', 'ta'], itemLabel: (v) => switch (v) { 'en' => 'English', 'hi' => 'Hindi', 'ta' => 'Tamil', _ => v, }, onChanged: (v) => setState(() => _language = v!), ), const SizedBox(height: 16), SettingsDropdownField( label: 'Currency', value: _currency, items: const ['INR', 'USD', 'EUR', 'AED'], itemLabel: (v) => v, onChanged: (v) => setState(() => _currency = v!), ), const SizedBox(height: 16), InputDecorator( decoration: const InputDecoration( labelText: 'Date Format', enabled: false, ), child: Text( 'DD/MM/YYYY', style: Theme.of(context).textTheme.bodyLarge, ), ), const SizedBox(height: 16), SettingsDropdownField( label: 'Time Format', value: _timeFormat, items: const ['HH:mm', 'hh:mm a'], itemLabel: (v) => v, onChanged: (v) => setState(() => _timeFormat = v!), ), const SizedBox(height: 16), SettingsDropdownField( label: 'Number Format', value: _numberFormat, items: const ['1,234.56', '1.234,56'], itemLabel: (v) => v, onChanged: (v) => setState(() => _numberFormat = v!), ), ], ), const SizedBox(height: 24), AppButton(label: 'Save Changes', onPressed: _save), ], ), ), ); } }