import 'package:flutter/material.dart'; import 'package:flux/features/tickets/models/ticket_model.dart'; class TicketWorkspaceScreen extends StatelessWidget { final TicketModel ticket; // Sostituisci con TicketModel const TicketWorkspaceScreen({super.key, required this.ticket}); @override Widget build(BuildContext context) { final theme = Theme.of(context); return Scaffold( appBar: AppBar( title: const Text('Banco di Lavoro'), backgroundColor: theme.colorScheme.inversePrimary, centerTitle: true, ), // SafeArea in basso per ospitare i bottoni fissi bottomNavigationBar: SafeArea(child: _buildBottomActions(context)), body: SingleChildScrollView( padding: const EdgeInsets.all(24.0), child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ _buildDeviceHeader(theme), const SizedBox(height: 24), _buildDefectRecap(theme), const SizedBox(height: 32), _buildOperationsSection(theme), ], ), ), ); } // --- 1. HEADER DISPOSITIVO E PASSWORD --- Widget _buildDeviceHeader(ThemeData theme) { return Card( elevation: 0, color: theme.colorScheme.primaryContainer.withValues(alpha: 0.4), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(16), side: BorderSide( color: theme.colorScheme.primary.withValues(alpha: 0.2), ), ), child: Padding( padding: const EdgeInsets.all(20.0), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( 'DISPOSITIVO IN LAVORAZIONE', style: TextStyle( fontSize: 12, fontWeight: FontWeight.bold, color: theme.colorScheme.primary, letterSpacing: 1.2, ), ), const SizedBox(height: 8), Text( ticket.targetModelName ?? 'Modello Sconosciuto', // Es: "iPhone 13 Pro" style: const TextStyle( fontSize: 24, fontWeight: FontWeight.w800, ), ), ], ), ), // IL DATO PIÙ CERCATO DAI TECNICI: LA PASSWORD Container( padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), decoration: BoxDecoration( color: theme.colorScheme.surface, borderRadius: BorderRadius.circular(12), border: Border.all(color: theme.dividerColor), ), child: Column( children: [ const Text( 'PIN / SBLOCCO Target device', style: TextStyle(fontSize: 10, color: Colors.grey), ), const SizedBox(height: 4), Text( ticket.targetPassword ?? '', style: const TextStyle( fontSize: 20, fontWeight: FontWeight.bold, letterSpacing: 2, ), ), const Text( 'PIN / SBLOCCO Source device', style: TextStyle(fontSize: 10, color: Colors.grey), ), const SizedBox(height: 4), Text( ticket.sourcePassword ?? '', style: const TextStyle( fontSize: 20, fontWeight: FontWeight.bold, letterSpacing: 2, ), ), ], ), ), ], ), ), ); } // --- 2. RECAP DIFETTO --- Widget _buildDefectRecap(ThemeData theme) { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ const Row( children: [ Icon(Icons.warning_amber_rounded, color: Colors.orange), SizedBox(width: 8), Text( 'Difetto Segnalato', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold), ), ], ), const SizedBox(height: 12), Container( width: double.infinity, padding: const EdgeInsets.all(16), decoration: BoxDecoration( color: theme.colorScheme.surfaceContainerHighest.withValues( alpha: 0.3, ), borderRadius: BorderRadius.circular(12), border: Border.all(color: theme.dividerColor), ), child: Text( ticket.request, style: const TextStyle(fontSize: 16, height: 1.5), ), ), ], ); } // --- 3. SEZIONE COSTI E RICAMBI (Mockup) --- Widget _buildOperationsSection(ThemeData theme) { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ const Text( 'Ricambi e Manodopera', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold), ), TextButton.icon( onPressed: () { // TODO: Apri modal per aggiungere una riga di costo }, icon: const Icon(Icons.add), label: const Text('Aggiungi Voce'), ), ], ), const SizedBox(height: 12), // Qui ci andrà un ListView.builder collegato alla tabella dei costi/operazioni Container( padding: const EdgeInsets.all(32), decoration: BoxDecoration( borderRadius: BorderRadius.circular(12), border: Border.all( color: theme.dividerColor, style: BorderStyle.solid, ), ), child: const Center( child: Text( 'Nessun ricambio o costo inserito.\nClicca su "Aggiungi Voce" per iniziare.', textAlign: TextAlign.center, style: TextStyle(color: Colors.grey), ), ), ), ], ); } // --- 4. BOTTONI AZIONE FINALI (In basso) --- Widget _buildBottomActions(BuildContext context) { return Container( padding: const EdgeInsets.all(16.0), decoration: BoxDecoration( color: Theme.of(context).scaffoldBackgroundColor, boxShadow: [ BoxShadow( color: Colors.black.withValues(alpha: 0.05), blurRadius: 10, offset: const Offset(0, -5), ), ], ), child: Row( children: [ // Bottone Pausa / Attesa Ricambi Expanded( flex: 1, child: OutlinedButton.icon( style: OutlinedButton.styleFrom( padding: const EdgeInsets.symmetric(vertical: 16), foregroundColor: Colors.orange.shade700, side: BorderSide(color: Colors.orange.shade700), ), onPressed: () { // TODO: Logica Metti in Pausa }, icon: const Icon(Icons.pause), label: const Text( 'Metti in Pausa', style: TextStyle(fontWeight: FontWeight.bold), ), ), ), const SizedBox(width: 12), // Bottone Completa Expanded( flex: 2, child: FilledButton.icon( style: FilledButton.styleFrom( padding: const EdgeInsets.symmetric(vertical: 16), backgroundColor: Colors.green.shade600, ), onPressed: () { // TODO: Logica Completa Riparazione }, icon: const Icon(Icons.check_circle_outline), label: const Text( 'COMPLETA RIPARAZIONE', style: TextStyle(fontWeight: FontWeight.bold, letterSpacing: 1), ), ), ), ], ), ); } }