import 'package:flutter/material.dart';

/// Mixin réutilisable pour gérer le mode sélection multiple
/// Utilisable dans equipment_management_page, container_management_page, etc.
mixin SelectionModeMixin<T extends StatefulWidget> on State<T> {
  // État du mode sélection
  bool _isSelectionMode = false;
  final Set<String> _selectedIds = {};

  // Getters
  bool get isSelectionMode => _isSelectionMode;
  Set<String> get selectedIds => _selectedIds;
  int get selectedCount => _selectedIds.length;
  bool get hasSelection => _selectedIds.isNotEmpty;

  /// Active/désactive le mode sélection
  void toggleSelectionMode() {
    setState(() {
      _isSelectionMode = !_isSelectionMode;
      if (!_isSelectionMode) {
        _selectedIds.clear();
      }
    });
  }

  /// Active le mode sélection
  void enableSelectionMode() {
    if (!_isSelectionMode) {
      setState(() {
        _isSelectionMode = true;
      });
    }
  }

  /// Désactive le mode sélection et efface la sélection
  void disableSelectionMode() {
    if (_isSelectionMode) {
      setState(() {
        _isSelectionMode = false;
        _selectedIds.clear();
      });
    }
  }

  /// Toggle la sélection d'un item
  void toggleItemSelection(String id) {
    setState(() {
      if (_selectedIds.contains(id)) {
        _selectedIds.remove(id);
      } else {
        _selectedIds.add(id);
      }
    });
  }

  /// Sélectionne un item
  void selectItem(String id) {
    setState(() {
      _selectedIds.add(id);
    });
  }

  /// Désélectionne un item
  void deselectItem(String id) {
    setState(() {
      _selectedIds.remove(id);
    });
  }

  /// Vérifie si un item est sélectionné
  bool isItemSelected(String id) {
    return _selectedIds.contains(id);
  }

  /// Sélectionne tous les items
  void selectAll(List<String> ids) {
    setState(() {
      _selectedIds.addAll(ids);
    });
  }

  /// Efface la sélection
  void clearSelection() {
    setState(() {
      _selectedIds.clear();
    });
  }

  /// Sélectionne/désélectionne tous les items
  void toggleSelectAll(List<String> ids) {
    setState(() {
      if (_selectedIds.length == ids.length) {
        // Tout est sélectionné, on désélectionne tout
        _selectedIds.clear();
      } else {
        // Sélectionner tout
        _selectedIds.addAll(ids);
      }
    });
  }

  /// Widget pour afficher le nombre d'éléments sélectionnés
  Widget buildSelectionCounter({
    required Color backgroundColor,
    required Color textColor,
    String? customText,
  }) {
    return Container(
      padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 6),
      decoration: BoxDecoration(
        color: backgroundColor,
        borderRadius: BorderRadius.circular(16),
      ),
      child: Text(
        customText ?? '$selectedCount sélectionné${selectedCount > 1 ? 's' : ''}',
        style: TextStyle(
          color: textColor,
          fontWeight: FontWeight.bold,
        ),
      ),
    );
  }

  /// AppBar pour le mode sélection
  PreferredSizeWidget buildSelectionAppBar({
    required String title,
    required List<Widget> actions,
    Color? backgroundColor,
  }) {
    return AppBar(
      backgroundColor: backgroundColor,
      leading: IconButton(
        icon: const Icon(Icons.close, color: Colors.white),
        onPressed: disableSelectionMode,
      ),
      title: Text(
        '$selectedCount $title sélectionné${selectedCount > 1 ? 's' : ''}',
        style: const TextStyle(color: Colors.white),
      ),
      actions: actions,
    );
  }
}

