import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';

import 'package:hl_lieferservice/feature/car_selection/bloc/bloc.dart';
import 'package:hl_lieferservice/feature/car_selection/bloc/state.dart';
import 'package:hl_lieferservice/feature/cars/bloc/cars_bloc.dart';
import 'package:hl_lieferservice/feature/cars/bloc/cars_event.dart';
import 'package:hl_lieferservice/feature/cars/bloc/cars_state.dart';
import 'package:hl_lieferservice/feature/cars/presentation/car_fail_page.dart';
import 'package:hl_lieferservice/feature/cars/presentation/car_management.dart';

class CarManagementPage extends StatefulWidget {
  const CarManagementPage({super.key});

  @override
  State<StatefulWidget> createState() => _CarManagementPageState();
}

class _CarManagementPageState extends State<CarManagementPage> {
  @override
  void initState() {
    super.initState();
    // Account-Identifizierung läuft serverseitig über den JWT — keine
    // teamId mehr aus dem AuthState extrahieren.
    context.read<CarsBloc>().add(const CarLoad());
  }

  void _add(String plate) {
    context.read<CarsBloc>().add(CarAdd(plate: plate));
  }

  Future<void> _refresh() async {
    context.read<CarsBloc>().add(const CarLoad(force: true));
  }

  void _remove(String carId) {
    // Schutz: wenn dieses Fahrzeug aktuell für heute ausgewählt ist,
    // darf es nicht deaktiviert werden.
    final carSelectState = context.read<CarSelectBloc>().state;
    if (carSelectState is CarSelectComplete &&
        carSelectState.selectedCar.id == carId) {
      ScaffoldMessenger.of(context).showSnackBar(
        const SnackBar(
          content: Text(
            "Dieses Fahrzeug ist aktuell ausgewählt und kann nicht "
            "deaktiviert werden. Bitte wähle zuerst ein anderes Fahrzeug "
            "aus.",
          ),
          duration: Duration(seconds: 4),
        ),
      );
      return;
    }

    // TODO Phase D: Schutz wieder einhängen, sobald TourBloc/Domain
    // mit UUID-Car-Ids arbeiten und prüfen, ob das Fahrzeug noch
    // beladene, nicht ausgelieferte Artikel hat.

    context.read<CarsBloc>().add(CarDeactivate(carId: carId));
  }

  void _edit(String carId, String plate) {
    context.read<CarsBloc>().add(CarEdit(carId: carId, plate: plate));
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: BlocBuilder<CarsBloc, CarsState>(
        builder: (context, state) {
          if (state is CarsLoading || state is CarsInitial) {
            return const Center(child: CircularProgressIndicator());
          }
          if (state is CarsLoaded) {
            return BlocBuilder<CarSelectBloc, CarSelectState>(
              builder: (context, selectState) {
                final String? selectedCarId =
                    selectState is CarSelectComplete
                        ? selectState.selectedCar.id
                        : null;
                return CarManagementOverview(
                  cars: state.cars,
                  selectedCarId: selectedCarId,
                  onEdit: _edit,
                  onAdd: _add,
                  onDelete: _remove,
                  onRefresh: _refresh,
                );
              },
            );
          }
          if (state is CarsLoadingFailed) {
            return const CarsLoadingFailedPage();
          }
          return const SizedBox.shrink();
        },
      ),
    );
  }
}
