import 'package:flutter/material.dart';
import 'package:em2rp/models/equipment_model.dart';

/// Widget de sélection de sous-catégorie avec autocomplétion
/// Similaire au système Brand/Model mais filtré par catégorie
class SubCategorySelector extends StatelessWidget {
  final TextEditingController controller;
  final EquipmentCategory? selectedCategory;
  final List<String> filteredSubCategories;
  final ValueChanged<String?>? onChanged;

  const SubCategorySelector({
    super.key,
    required this.controller,
    required this.selectedCategory,
    required this.filteredSubCategories,
    this.onChanged,
  });

  @override
  Widget build(BuildContext context) {
    return Autocomplete<String>(
      initialValue: TextEditingValue(text: controller.text),
      optionsBuilder: (TextEditingValue textEditingValue) {
        if (selectedCategory == null) {
          return const Iterable<String>.empty();
        }
        if (textEditingValue.text.isEmpty) {
          return filteredSubCategories;
        }
        return filteredSubCategories.where((String subCategory) {
          return subCategory.toLowerCase().contains(
            textEditingValue.text.toLowerCase(),
          );
        });
      },
      onSelected: (String selection) {
        controller.text = selection;
        onChanged?.call(selection);
      },
      fieldViewBuilder: (context, fieldController, focusNode, onEditingComplete) {
        if (fieldController.text != controller.text) {
          fieldController.text = controller.text;
        }
        return TextFormField(
          controller: fieldController,
          focusNode: focusNode,
          enabled: selectedCategory != null,
          decoration: InputDecoration(
            labelText: 'Sous-catégorie',
            border: const OutlineInputBorder(),
            prefixIcon: const Icon(Icons.category_outlined),
            hintText: selectedCategory == null
                ? 'Catégorie requise'
                : 'Saisissez la sous-catégorie',
            helperText: 'Optionnel - Permet un classement plus précis',
          ),
          onChanged: (value) {
            controller.text = value;
            onChanged?.call(value.isNotEmpty ? value : null);
          },
        );
      },
    );
  }
}
