import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flux/features/auth/bloc/auth_cubit.dart'; import 'package:flux/features/company/bloc/company_bloc.dart'; import 'package:flux/core/blocs/session/session_cubit.dart'; import 'package:flux/core/theme/theme.dart'; import 'package:flux/core/widgets/flux_text_field.dart'; import 'package:flux/features/company/models/company_model.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 i campi obbligatori final _ragioneSocialeController = TextEditingController(); final _indirizzoController = TextEditingController(); final _capController = TextEditingController(); final _cittaController = TextEditingController(); final _provinciaController = TextEditingController(); final _pIvaController = TextEditingController(); final _cfController = TextEditingController(); final _univocoController = TextEditingController(); @override void dispose() { // Ricordati sempre di chiuderli! _ragioneSocialeController.dispose(); _indirizzoController.dispose(); _capController.dispose(); _cittaController.dispose(); _provinciaController.dispose(); _pIvaController.dispose(); _cfController.dispose(); _univocoController.dispose(); super.dispose(); } void _onSave() { if (_formKey.currentState!.validate()) { // Recuperiamo l'ID utente attuale da Supabase o dal SessionBloc final userId = context.read().state.user!.id; final company = CompanyModel( userId: userId, ragioneSociale: _ragioneSocialeController.text.trim(), indirizzo: _indirizzoController.text.trim(), cap: _capController.text.trim(), citta: _cittaController.text.trim(), provincia: _provinciaController.text.trim(), partitaIva: _pIvaController.text.trim(), codiceFiscale: _cfController.text.trim(), codiceUnivoco: _univocoController.text.trim().toUpperCase(), // Gli altri campi hanno i default nel modello ); // Spariamo l'evento al Bloc context.read().add(CreateCompanyRequested(company: company)); } } @override Widget build(BuildContext context) { return 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 && state.company != null) { // 1. Aggiorniamo la singleton con i dati reali (ID incluso) //GetIt.I.get().setCurrentCompany(state.company); // 2. Notifichiamo il SessionBloc per cambiare pagina //context.read().add(AppStarted()); } if (state.status == CompanyStatus.failure) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text( state.errorMessage ?? 'Errore durante il salvataggio', ), backgroundColor: Colors.redAccent, ), ); } }, 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: _univocoController, ), 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 : () => _onSave(), child: state.status == CompanyStatus.loading ? const CircularProgressIndicator() : const Text('SALVA AZIENDA'), ), ); } 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, ), ); } }