import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flux/core/routes/routes.dart';
import 'package:flux/features/tickets/blocs/ticket_form_cubit.dart';
import 'package:flux/features/tickets/blocs/ticket_form_state.dart';
import 'package:flux/features/tickets/blocs/ticket_list_cubit.dart';
import 'package:flux/features/tickets/models/ticket_model.dart';
import 'package:flux/features/tickets/ui/ticket_workspace/completion_ticket_dialog.dart';
import 'package:flux/features/tickets/ui/ticket_workspace/pause_ticket_dialog.dart';
import 'package:go_router/go_router.dart';

class TicketWorkspaceScreen extends StatelessWidget {
  const TicketWorkspaceScreen({super.key});

  @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: BlocBuilder<TicketFormCubit, TicketFormState>(
          builder: (context, state) {
            return Column(
              crossAxisAlignment: CrossAxisAlignment.stretch,
              children: [
                _buildDeviceHeader(theme, state.ticket),
                const SizedBox(height: 24),
                _buildDefectRecap(theme, state.ticket),
                const SizedBox(height: 32),
                _buildOperationsSection(theme, state.ticket),
              ],
            );
          },
        ),
      ),
    );
  }

  // --- 1. HEADER DISPOSITIVO E PASSWORD ---
  Widget _buildDeviceHeader(ThemeData theme, TicketModel ticket) {
    bool hasTargetPw =
        ((ticket.targetPassword != null && ticket.targetPassword!.isNotEmpty));
    bool hasSourcePw =
        ((ticket.sourcePassword != null && ticket.sourcePassword!.isNotEmpty));
    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,
                    ),
                  ),
                ],
              ),
            ),
            if (hasSourcePw || hasTargetPw) ...[
              Wrap(
                spacing: 12,
                runSpacing: 12,
                children: [
                  if (hasTargetPw)
                    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,
                            ),
                          ),
                        ],
                      ),
                    ),
                  if (hasSourcePw)
                    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 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, TicketModel ticket) {
    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, TicketModel ticket) {
    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
          Expanded(
            flex: 1,
            child: OutlinedButton.icon(
              // ... stile del bottone ...
              onPressed: () async {
                // 1. Apriamo la modale e riceviamo il RECORD
                final result = await showPauseTicketDialog(context);

                // 2. Se l'utente ha confermato...
                if (result != null && context.mounted) {
                  // 3. Lanciamo l'azione passando lo stato esatto e le note
                  await context.read<TicketFormCubit>().pauseTicket(
                    newStatus: result.status,
                    notes: result.reason,
                  );

                  // 4. Riportiamo l'utente alla dashboard
                  if (context.mounted) Navigator.of(context).pop();
                }
              },
              icon: const Icon(Icons.pause),
              label: const Text('Metti in Pausa'),
            ),
          ),
          // Bottone Completa
          Expanded(
            flex: 2,
            child: FilledButton.icon(
              style: FilledButton.styleFrom(
                padding: const EdgeInsets.symmetric(vertical: 16),
                backgroundColor: Colors.green.shade600,
              ),
              onPressed: () async {
                // 1. Apriamo la nuova modale avanzata e aspettiamo il Record.
                // (Per ora passiamo 0.0, poi lo sostituiremo con la somma dei costi)
                final completionData = await showCompletionTicketDialog(
                  context,
                  calculatedTotal: 0.0,
                );

                // 2. Se l'utente ha premuto "Conferma" e non "Annulla"...
                if (completionData != null && context.mounted) {
                  // 3. Lanciamo l'azione nel Cubit
                  await context.read<TicketFormCubit>().completeTicket(
                    result: completionData.result,
                    finalPrice: completionData.finalPrice,
                  );

                  if (context.mounted) {
                    // 4. Avvisiamo il "Vigile Urbano" di ricaricare la lista
                    context.read<TicketListCubit>().loadTickets(refresh: true);

                    // 5. Teletrasporto alla Base
                    context.goNamed(Routes.home);
                  }
                }
              },
              icon: const Icon(Icons.check_circle_outline),
              label: const Text(
                'COMPLETA RIPARAZIONE',
                style: TextStyle(fontWeight: FontWeight.bold, letterSpacing: 1),
              ),
            ),
          ),
        ],
      ),
    );
  }
}
