import 'package:flutter/material.dart';
import 'package:geosector_app/core/constants/app_keys.dart';
import 'package:geosector_app/core/data/models/membre_model.dart';
import 'package:geosector_app/presentation/widgets/membre_table_widget.dart';
import 'package:hive_flutter/hive_flutter.dart';

/// Exemple d'utilisation du widget MembreTableWidget
///
/// Ce widget montre comment intégrer le tableau de membres dans une page
/// et comment gérer les événements d'édition et de suppression.
class MembreTableExample extends StatefulWidget {
  const MembreTableExample({Key? key}) : super(key: key);

  @override
  State<MembreTableExample> createState() => _MembreTableExampleState();
}

class _MembreTableExampleState extends State<MembreTableExample> {
  List<MembreModel> _membres = [];
  bool _isLoading = true;

  @override
  void initState() {
    super.initState();
    _loadMembres();
  }

  Future<void> _loadMembres() async {
    setState(() {
      _isLoading = true;
    });

    try {
      // S'assurer que la boîte Hive est ouverte
      if (!Hive.isBoxOpen(AppKeys.membresBoxName)) {
        await Hive.openBox<MembreModel>(AppKeys.membresBoxName);
      }

      // Récupérer les membres depuis la boîte Hive
      final membresBox = Hive.box<MembreModel>(AppKeys.membresBoxName);
      final membres = membresBox.values.toList();

      setState(() {
        _membres = membres;
        _isLoading = false;
      });
    } catch (e) {
      debugPrint('Erreur lors du chargement des membres: $e');
      setState(() {
        _isLoading = false;
      });
    }
  }

  void _handleEdit(MembreModel membre) {
    // Exemple de gestion de l'événement d'édition
    debugPrint(
        'Édition du membre: ${membre.firstName} ${membre.name} (ID: ${membre.id})');

    // Ici, vous pourriez ouvrir une boîte de dialogue ou naviguer vers une page d'édition
    showDialog(
      context: context,
      builder: (context) => AlertDialog(
        title: const Text('Édition de membre'),
        content: Text(
            'Vous avez demandé à éditer le membre ${membre.firstName} ${membre.name}'),
        actions: [
          TextButton(
            onPressed: () => Navigator.of(context).pop(),
            child: const Text('Fermer'),
          ),
        ],
      ),
    );
  }

  void _handleDelete(MembreModel membre) {
    // Exemple de gestion de l'événement de suppression
    debugPrint(
        'Suppression du membre: ${membre.firstName} ${membre.name} (ID: ${membre.id})');

    // Demander confirmation avant de supprimer
    showDialog(
      context: context,
      builder: (context) => AlertDialog(
        title: const Text('Confirmation de suppression'),
        content: Text(
            'Êtes-vous sûr de vouloir supprimer le membre ${membre.firstName} ${membre.name} ?'),
        actions: [
          TextButton(
            onPressed: () => Navigator.of(context).pop(),
            child: const Text('Annuler'),
          ),
          TextButton(
            onPressed: () async {
              // Fermer la boîte de dialogue
              Navigator.of(context).pop();

              try {
                // Supprimer le membre de la boîte Hive
                final membresBox =
                    Hive.box<MembreModel>(AppKeys.membresBoxName);
                await membresBox.delete(membre.id);

                // Mettre à jour l'état
                setState(() {
                  _membres = _membres.where((m) => m.id != membre.id).toList();
                });

                // Afficher un message de confirmation
                if (mounted) {
                  ScaffoldMessenger.of(context).showSnackBar(
                    SnackBar(
                      content: Text(
                          'Membre ${membre.firstName} ${membre.name} supprimé'),
                      backgroundColor: Colors.green,
                    ),
                  );
                }
              } catch (e) {
                debugPrint('Erreur lors de la suppression du membre: $e');
                if (mounted) {
                  ScaffoldMessenger.of(context).showSnackBar(
                    SnackBar(
                      content: Text('Erreur lors de la suppression: $e'),
                      backgroundColor: Colors.red,
                    ),
                  );
                }
              }
            },
            child: const Text('Supprimer'),
            style: TextButton.styleFrom(foregroundColor: Colors.red),
          ),
        ],
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Tableau des Membres'),
        actions: [
          IconButton(
            icon: const Icon(Icons.refresh),
            onPressed: _loadMembres,
            tooltip: 'Rafraîchir',
          ),
        ],
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: _isLoading
            ? const Center(child: CircularProgressIndicator())
            : MembreTableWidget(
                membres: _membres,
                onEdit: _handleEdit,
                onDelete: _handleDelete,
                height:
                    null, // Utiliser null pour que le widget prenne toute la hauteur disponible
              ),
      ),
    );
  }
}
