import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flux/features/auth/bloc/auth_bloc.dart'; import 'package:flux/features/company/bloc/company_bloc.dart'; import 'package:flux/core/blocs/session/session_bloc.dart'; import 'package:flux/core/theme/theme.dart'; import 'package:flux/core/widgets/flux_text_field.dart'; class CreateCompanyScreen extends StatefulWidget { const CreateCompanyScreen({super.key}); @override State createState() => _CreateCompanyScreenState(); } // lib/ui/setup/create_company_screen.dart class _CreateCompanyScreenState extends State { final _formKey = GlobalKey(); // Controller per ogni campo dello schema SQL final _ragioneSocialeController = TextEditingController(); final _pIvaController = TextEditingController(); final _cfController = TextEditingController(); final _sdiController = TextEditingController(); final _indirizzoController = TextEditingController(); final _capController = TextEditingController(); final _cittaController = TextEditingController(); final _provinciaController = TextEditingController(); @override Widget build(BuildContext context) { return BlocProvider( create: (context) => CompanyBloc(), child: Scaffold( appBar: AppBar( title: const Text('Configurazione Azienda'), actions: [ IconButton( icon: const Icon(Icons.logout_rounded), onPressed: () { // Qui chiami il tuo Bloc dell'autenticazione per fare logout // Esempio se hai un AuthBloc o SessionBloc: context.read().add(LogoutRequested()); // Se vuoi solo tornare brutalmente alla login per testare il logo: // Navigator.of(context).pushReplacementNamed('/login'); }, ), ], ), body: BlocConsumer( listener: (context, state) { if (state.status == CompanyStatus.success) { context.read().add(AppStarted()); } }, builder: (context, state) { return SafeArea( child: SingleChildScrollView( padding: const EdgeInsets.all(24.0), child: Form( key: _formKey, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ _buildHeader(context), const SizedBox(height: 32), // --- SEZIONE 1: IDENTITÀ FISCALE --- _SectionTitle(title: 'DATI FISCALI'), const SizedBox(height: 16), FluxTextField( label: 'Ragione Sociale', icon: Icons.business, controller: _ragioneSocialeController, ), const SizedBox(height: 16), Row( children: [ Expanded( child: FluxTextField( label: 'Partita IVA', icon: Icons.numbers, controller: _pIvaController, ), ), const SizedBox(width: 12), Expanded( child: FluxTextField( label: 'Codice Fiscale', icon: Icons.badge_outlined, controller: _cfController, ), ), ], ), const SizedBox(height: 16), FluxTextField( label: 'Codice Univoco (SDI) / PEC', icon: Icons.send_and_archive_outlined, controller: _sdiController, ), const SizedBox(height: 32), // --- SEZIONE 2: SEDE LEGALE --- _SectionTitle(title: 'SEDE LEGALE'), const SizedBox(height: 16), FluxTextField( label: 'Indirizzo e n. civico', icon: Icons.home_work_outlined, controller: _indirizzoController, ), const SizedBox(height: 16), Row( children: [ Expanded( flex: 2, child: FluxTextField( label: 'Città', icon: Icons.location_city, controller: _cittaController, ), ), const SizedBox(width: 12), Expanded( child: FluxTextField( label: 'CAP', icon: Icons.map_outlined, controller: _capController, ), ), const SizedBox(width: 12), Expanded( child: FluxTextField( label: 'Prov', icon: Icons.explore_outlined, controller: _provinciaController, ), ), ], ), const SizedBox(height: 32), // --- SEZIONE 3: LOGO AZIENDALE --- _SectionTitle(title: 'BRANDING'), const SizedBox(height: 16), _buildLogoPicker(context), const SizedBox(height: 48), // --- BOTTONE INVIO --- _buildSubmitButton(context, state), ], ), ), ), ); }, ), ), ); } // Placeholder per il futuro caricamento logo Widget _buildLogoPicker(BuildContext context) { return Container( width: double.infinity, padding: const EdgeInsets.all(24), decoration: BoxDecoration( color: context.accent.withValues(alpha: 0.05), borderRadius: BorderRadius.circular(16), // Bordo continuo ma sottile e semitrasparente per un look pulito border: Border.all( color: context.accent.withValues(alpha: 0.3), width: 1, ), ), child: Column( children: [ Icon(Icons.cloud_upload_outlined, color: context.accent, size: 32), const SizedBox(height: 12), Text( 'Carica Logo Aziendale', style: TextStyle( color: context.primaryText, fontWeight: FontWeight.bold, ), ), const SizedBox(height: 4), Text( 'Verrà usato per le tue stampe e ricevute', textAlign: TextAlign.center, style: TextStyle(color: context.secondaryText, fontSize: 12), ), ], ), ); } Widget _buildSubmitButton(BuildContext context, CompanyState state) { return SizedBox( width: double.infinity, height: 56, child: ElevatedButton( onPressed: state.status == CompanyStatus.loading ? null : () => _submit(context), child: state.status == CompanyStatus.loading ? const CircularProgressIndicator() : const Text('SALVA AZIENDA'), ), ); } void _submit(BuildContext context) { // Qui chiameremo il Bloc passando tutti i dati raccolti dai controller context.read().add( SaveCompanyRequested( ragioneSociale: _ragioneSocialeController.text, partitaIva: _pIvaController.text, codiceFiscale: _cfController.text, codiceUnivoco: _sdiController.text, indirizzo: _indirizzoController.text, cap: _capController.text, citta: _cittaController.text, provincia: _provinciaController.text, companyLogo: '', // Per ora vuoto come da accordi ), ); } Widget _buildHeader(BuildContext context) { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( padding: const EdgeInsets.all(12), decoration: BoxDecoration( color: context.accent.withValues(alpha: 0.1), borderRadius: BorderRadius.circular(16), ), child: Icon( Icons.domain_add_rounded, color: context.accent, size: 32, ), ), const SizedBox(height: 24), Text( 'Configura la tua Azienda', style: Theme.of(context).textTheme.headlineMedium?.copyWith( fontWeight: FontWeight.bold, color: context.primaryText, ), ), const SizedBox(height: 12), Text( 'FLUX ha bisogno dei tuoi dati fiscali per gestire correttamente le fatturazioni e le attivazioni dei tuoi negozi.', style: TextStyle( color: context.secondaryText, fontSize: 15, height: 1.5, ), ), ], ); } } // Widget di supporto per i titoli delle sezioni class _SectionTitle extends StatelessWidget { final String title; const _SectionTitle({required this.title}); @override Widget build(BuildContext context) { return Text( title, style: TextStyle( color: context.accent, fontWeight: FontWeight.w800, letterSpacing: 1.2, fontSize: 13, ), ); } }