import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flux/features/settings/document_sequence/blocs/document_sequence_cubit.dart'; class DocumentSequenceSection extends StatelessWidget { const DocumentSequenceSection({super.key}); @override Widget build(BuildContext context) { final year = DateTime.now().year; return BlocBuilder( builder: (context, state) { if (state.isLoading) { return const Center(child: CircularProgressIndicator()); } return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( padding: const EdgeInsets.symmetric(vertical: 16.0), child: Text( "Protocolli e Numerazione", style: Theme.of( context, ).textTheme.titleLarge?.copyWith(fontWeight: FontWeight.bold), ), ), ...state.sequences.map((seq) { // Anteprima dinamica final preview = "${seq.prefix.isNotEmpty ? '${seq.prefix}-' : ''}$year-${seq.nextValue.toString().padLeft(6, '0')}"; return Card( margin: const EdgeInsets.only(bottom: 12), child: Padding( padding: const EdgeInsets.all(16.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( seq.docType.toUpperCase(), style: const TextStyle( fontWeight: FontWeight.bold, color: Colors.blue, ), ), const SizedBox(height: 12), Row( children: [ Expanded( flex: 2, child: TextFormField( initialValue: seq.prefix, decoration: const InputDecoration( labelText: 'Prefisso', hintText: 'es. TCK', ), onChanged: (val) => context .read() .updateLocalSequence( seq.docType, prefix: val, ), ), ), const SizedBox(width: 16), Expanded( flex: 3, child: TextFormField( initialValue: seq.nextValue.toString(), keyboardType: TextInputType.number, decoration: const InputDecoration( labelText: 'Prossimo Numero', ), onChanged: (val) => context .read() .updateLocalSequence( seq.docType, nextValue: int.tryParse(val) ?? 1, ), ), ), ], ), const SizedBox(height: 12), Container( padding: const EdgeInsets.all(8), decoration: BoxDecoration( color: Colors.grey.shade100, borderRadius: BorderRadius.circular(8), ), child: Row( children: [ const Icon( Icons.visibility, size: 16, color: Colors.grey, ), const SizedBox(width: 8), Text( "Anteprima prossimo: ", style: TextStyle( color: Colors.grey.shade700, fontSize: 12, ), ), Text( preview, style: const TextStyle( fontWeight: FontWeight.bold, fontFamily: 'monospace', ), ), ], ), ), ], ), ), ); }), const SizedBox(height: 16), SizedBox( width: double.infinity, child: ElevatedButton.icon( onPressed: () => context.read().saveSequences(), icon: const Icon(Icons.save), label: const Text("SALVA PROTOCOLLI"), ), ), ], ); }, ); } }