import 'package:flutter/material.dart';
import 'package:geosector_app/core/data/models/amicale_model.dart';
import 'package:geosector_app/core/repositories/amicale_repository.dart';
import 'package:geosector_app/presentation/widgets/amicale_table_widget.dart';
import 'package:provider/provider.dart';

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

  @override
  State<AmicaleTableExample> createState() => _AmicaleTableExampleState();
}

class _AmicaleTableExampleState extends State<AmicaleTableExample> {
  bool _isLoading = true;
  List<AmicaleModel> _amicales = [];
  String? _errorMessage;

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

  Future<void> _loadAmicales() async {
    setState(() {
      _isLoading = true;
      _errorMessage = null;
    });

    try {
      // Récupérer les amicales depuis le repository
      final amicaleRepository =
          Provider.of<AmicaleRepository>(context, listen: false);
      final amicales = amicaleRepository.getAllAmicales();

      setState(() {
        _amicales = amicales;
        _isLoading = false;
      });
    } catch (e) {
      setState(() {
        _errorMessage = 'Erreur lors du chargement des amicales: $e';
        _isLoading = false;
      });
    }
  }

  void _handleEdit(AmicaleModel amicale) {
    // Afficher une boîte de dialogue de confirmation
    showDialog(
      context: context,
      builder: (context) => AlertDialog(
        title: const Text('Modifier l\'amicale'),
        content: Text('Voulez-vous modifier l\'amicale ${amicale.name} ?'),
        actions: [
          TextButton(
            onPressed: () => Navigator.of(context).pop(),
            child: const Text('Annuler'),
          ),
          ElevatedButton(
            onPressed: () {
              Navigator.of(context).pop();
              // Naviguer vers la page de modification
              // Navigator.of(context).push(
              //   MaterialPageRoute(
              //     builder: (context) => EditAmicalePage(amicale: amicale),
              //   ),
              // );
            },
            child: const Text('Modifier'),
          ),
        ],
      ),
    );
  }

  void _handleDelete(AmicaleModel amicale) {
    // Afficher une boîte de dialogue de confirmation
    showDialog(
      context: context,
      builder: (context) => AlertDialog(
        title: const Text('Supprimer l\'amicale'),
        content: Text(
            'Êtes-vous sûr de vouloir supprimer l\'amicale ${amicale.name} ?'),
        actions: [
          TextButton(
            onPressed: () => Navigator.of(context).pop(),
            child: const Text('Annuler'),
          ),
          ElevatedButton(
            style: ElevatedButton.styleFrom(
              backgroundColor: Colors.red,
              foregroundColor: Colors.white,
            ),
            onPressed: () {
              Navigator.of(context).pop();
              _deleteAmicale(amicale);
            },
            child: const Text('Supprimer'),
          ),
        ],
      ),
    );
  }

  Future<void> _deleteAmicale(AmicaleModel amicale) async {
    try {
      setState(() {
        _isLoading = true;
      });

      // Supprimer l'amicale via le repository
      final amicaleRepository =
          Provider.of<AmicaleRepository>(context, listen: false);
      await amicaleRepository.deleteAmicale(amicale.id);

      // Recharger la liste
      await _loadAmicales();

      // Afficher un message de succès
      if (mounted) {
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(
            content: Text('Amicale ${amicale.name} supprimée avec succès'),
            backgroundColor: Colors.green,
          ),
        );
      }
    } catch (e) {
      setState(() {
        _isLoading = false;
        _errorMessage = 'Erreur lors de la suppression: $e';
      });

      // Afficher un message d'erreur
      if (mounted) {
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(
            content: Text('Erreur: $_errorMessage'),
            backgroundColor: Colors.red,
          ),
        );
      }
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Liste des amicales'),
        actions: [
          IconButton(
            icon: const Icon(Icons.refresh),
            onPressed: _loadAmicales,
            tooltip: 'Actualiser',
          ),
        ],
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            // Titre et description
            Text(
              'Gestion des amicales',
              style: Theme.of(context).textTheme.headlineSmall,
            ),
            const SizedBox(height: 8),
            Text(
              'Consultez, modifiez ou supprimez les amicales selon vos droits d\'accès.',
              style: Theme.of(context).textTheme.bodyMedium,
            ),
            const SizedBox(height: 24),

            // Message d'erreur si présent
            if (_errorMessage != null)
              Container(
                padding: const EdgeInsets.all(12),
                margin: const EdgeInsets.only(bottom: 16),
                decoration: BoxDecoration(
                  color: Colors.red.withOpacity(0.1),
                  borderRadius: BorderRadius.circular(8),
                  border: Border.all(color: Colors.red.withOpacity(0.3)),
                ),
                child: Row(
                  children: [
                    const Icon(Icons.error_outline, color: Colors.red),
                    const SizedBox(width: 12),
                    Expanded(
                      child: Text(
                        _errorMessage!,
                        style: const TextStyle(color: Colors.red),
                      ),
                    ),
                  ],
                ),
              ),

            // Tableau des amicales
            Expanded(
              child: AmicaleTableWidget(
                amicales: _amicales,
                isLoading: _isLoading,
                onDelete: _handleDelete,
                emptyMessage:
                    'Aucune amicale trouvée. Veuillez en créer une nouvelle.',
                readOnly: false, // Permettre la modification dans la modale
              ),
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          // Naviguer vers la page de création
          // Navigator.of(context).push(
          //   MaterialPageRoute(
          //     builder: (context) => CreateAmicalePage(),
          //   ),
          // );
        },
        tooltip: 'Ajouter une amicale',
        child: const Icon(Icons.add),
      ),
    );
  }
}
