import 'package:flutter/material.dart';
import 'package:geosector_app/app.dart';
import 'package:geosector_app/core/data/models/amicale_model.dart';
import 'package:geosector_app/core/repositories/region_repository.dart';
import 'package:geosector_app/core/repositories/user_repository.dart';
import 'package:geosector_app/presentation/widgets/amicale_row_widget.dart';
import 'package:geosector_app/presentation/widgets/entite_form.dart';
import 'package:provider/provider.dart';

/// Widget de tableau pour afficher une liste d'amicales
///
/// Ce widget affiche un tableau avec les colonnes :
/// - ID
/// - Nom
/// - Code Postal
/// - Région
/// - Actions (boutons selon les droits de l'utilisateur)
///
/// Lorsqu'on clique sur une ligne, une modale s'affiche avec le formulaire EntiteForm
class AmicaleTableWidget extends StatelessWidget {
  final List<AmicaleModel> amicales;
  final Function(AmicaleModel)? onDelete;
  final bool isLoading;
  final String? emptyMessage;
  final bool readOnly;

  const AmicaleTableWidget({
    Key? key,
    required this.amicales,
    this.onDelete,
    this.isLoading = false,
    this.emptyMessage,
    this.readOnly = false,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    final theme = Theme.of(context);

    return Column(
      crossAxisAlignment: CrossAxisAlignment.stretch,
      children: [
        // En-tête du tableau - utiliser AmicaleRowWidget pour l'en-tête
        AmicaleRowWidget(
          amicale: AmicaleModel(
            id: 0,
            name: '',
            codePostal: '',
            ville: '',
            libRegion: '',
          ),
          isHeader: true,
          onTap: null,
          onDelete: null,
        ),

        // Corps du tableau
        Container(
          decoration: BoxDecoration(
            color: theme.colorScheme.surface,
            borderRadius: const BorderRadius.only(
              bottomLeft: Radius.circular(8),
              bottomRight: Radius.circular(8),
            ),
            border: Border.all(
              color: theme.colorScheme.primary.withOpacity(0.1),
              width: 1,
            ),
          ),
          child: _buildTableContent(context),
        ),
      ],
    );
  }

  Widget _buildTableContent(BuildContext context) {
    // Afficher un indicateur de chargement si isLoading est true
    if (isLoading) {
      return const Padding(
        padding: EdgeInsets.symmetric(vertical: 32.0),
        child: Center(child: CircularProgressIndicator()),
      );
    }

    // Afficher un message si la liste est vide
    if (amicales.isEmpty) {
      return Padding(
        padding: const EdgeInsets.symmetric(vertical: 32.0),
        child: Center(
          child: Text(
            emptyMessage ?? 'Aucune amicale trouvée',
            style: Theme.of(context).textTheme.bodyLarge?.copyWith(
                  color:
                      Theme.of(context).colorScheme.onSurface.withOpacity(0.6),
                ),
          ),
        ),
      );
    }

    // Afficher la liste des amicales
    return ListView.builder(
      shrinkWrap: true,
      physics: const NeverScrollableScrollPhysics(),
      itemCount: amicales.length,
      itemBuilder: (context, index) {
        final amicale = amicales[index];
        return AmicaleRowWidget(
          amicale: amicale,
          isAlternate: index % 2 == 1, // Alterner les couleurs
          onTap: (selectedAmicale) =>
              _showAmicaleDetails(context, selectedAmicale),
          onDelete: onDelete,
        );
      },
    );
  }

  // Afficher une modale avec le formulaire EntiteForm
  void _showAmicaleDetails(BuildContext context, AmicaleModel amicale) {
    // Utiliser l'instance globale de userRepository définie dans app.dart
    final userRepo = userRepository;
    // Créer une instance de RegionRepository
    final regionRepo = RegionRepository();

    showDialog(
      context: context,
      builder: (dialogContext) => MultiProvider(
        providers: [
          // Fournir les repositories nécessaires au formulaire
          Provider<UserRepository>.value(value: userRepo),
          Provider<RegionRepository>.value(value: regionRepo),
        ],
        child: Dialog(
          shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.circular(16),
          ),
          child: Container(
            width: MediaQuery.of(dialogContext).size.width * 0.6,
            padding: const EdgeInsets.all(24),
            child: SingleChildScrollView(
              child: Column(
                mainAxisSize: MainAxisSize.min,
                crossAxisAlignment: CrossAxisAlignment.start,
                children: [
                  Row(
                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
                    children: [
                      Text(
                        'Détails de l\'amicale',
                        style: Theme.of(dialogContext)
                            .textTheme
                            .headlineSmall
                            ?.copyWith(
                              fontWeight: FontWeight.bold,
                              color:
                                  Theme.of(dialogContext).colorScheme.primary,
                            ),
                      ),
                      IconButton(
                        icon: const Icon(Icons.close),
                        onPressed: () => Navigator.of(dialogContext).pop(),
                      ),
                    ],
                  ),
                  const SizedBox(height: 16),
                  // Formulaire EntiteForm en mode lecture seule
                  EntiteForm(
                    amicale: amicale,
                    readOnly: readOnly,
                    onSubmit: (updatedAmicale) {
                      Navigator.of(dialogContext).pop();
                      // Ici, vous pourriez ajouter une logique pour mettre à jour l'amicale
                    },
                  ),
                ],
              ),
            ),
          ),
        ),
      ),
    );
  }
}
