import 'package:flutter/material.dart';
import 'package:geosector_app/core/data/models/membre_model.dart';

class MembreRowWidget extends StatelessWidget {
  final MembreModel membre;
  final Function(MembreModel)? onEdit;
  final Function(MembreModel)? onDelete;
  final Function(MembreModel)? onResetPassword;
  final bool isAlternate;
  final VoidCallback? onTap;
  final bool isMobile;

  const MembreRowWidget({
    super.key,
    required this.membre,
    this.onEdit,
    this.onDelete,
    this.onResetPassword,
    this.isAlternate = false,
    this.onTap,
    this.isMobile = false,
  });

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

    // Couleur de fond alternée
    final backgroundColor = isAlternate
        ? theme.colorScheme.primary.withOpacity(0.05)
        : Colors.transparent;

    return InkWell(
      // Envelopper le contenu dans un InkWell
      onTap: onTap, // Utiliser le callback onTap
      hoverColor: theme.colorScheme.primary.withOpacity(0.15),
      child: Container(
        padding: const EdgeInsets.symmetric(vertical: 8.0, horizontal: 16.0),
        decoration: BoxDecoration(
          color: backgroundColor,
        ),
        child: Row(
          children: [
            // ID - masqué en mobile
            if (!isMobile)
              Expanded(
                flex: 1,
                child: Text(
                  membre.id.toString(),
                  style: theme.textTheme.bodyMedium,
                ),
              ),

            // Identifiant (username) - masqué en mobile
            if (!isMobile)
              Expanded(
                flex: 2,
                child: Text(
                  membre.username ?? '',
                  style: theme.textTheme.bodyMedium,
                ),
              ),

            // Prénom
            Expanded(
              flex: isMobile ? 2 : 2,
              child: Text(
                membre.firstName ?? '',
                style: theme.textTheme.bodyMedium,
              ),
            ),

            // Nom
            Expanded(
              flex: isMobile ? 2 : 2,
              child: Text(
                membre.name ?? '',
                style: theme.textTheme.bodyMedium,
              ),
            ),

            // Tournée (sectName) - masqué en mobile
            if (!isMobile)
              Expanded(
                flex: 2,
                child: Text(
                  membre.sectName ?? '',
                  style: theme.textTheme.bodyMedium,
                ),
              ),

            // Email - masqué en mobile
            if (!isMobile)
              Expanded(
                flex: 3,
                child: Text(
                  membre.email,
                  style: theme.textTheme.bodyMedium,
                ),
              ),

            // Rôle - masqué en mobile
            if (!isMobile)
              Expanded(
                flex: 1,
                child: Text(
                  _getRoleName(membre.role),
                  style: theme.textTheme.bodyMedium,
                ),
              ),

            // Statut
            Expanded(
              flex: 1,
              child: Center(
                child: Tooltip(
                  message: membre.isActive == true ? 'Actif' : 'Inactif',
                  child: Icon(
                    membre.isActive == true ? Icons.check_circle : Icons.cancel,
                    color: membre.isActive == true ? Colors.green : Colors.red,
                    size: 24,
                  ),
                ),
              ),
            ),

            // Actions
            if (onEdit != null || onDelete != null || onResetPassword != null)
              Expanded(
                flex: isMobile ? 2 : 2,
                child: Row(
                  mainAxisAlignment: MainAxisAlignment.end,
                  children: [
                    // Bouton reset password (uniquement pour les membres actifs)
                    if (onResetPassword != null && membre.isActive == true)
                      IconButton(
                        icon: Icon(Icons.lock_reset, size: isMobile ? 20 : 22),
                        onPressed: () => onResetPassword!(membre),
                        tooltip: 'Réinitialiser le mot de passe',
                        color: theme.colorScheme.primary,
                      ),
                    if (onDelete != null)
                      IconButton(
                        icon: Icon(Icons.delete, size: isMobile ? 20 : 22),
                        onPressed: () => onDelete!(membre),
                        tooltip: 'Supprimer',
                        color: theme.colorScheme.error,
                      ),
                  ],
                ),
              ),
          ],
        ),
      ),
    );
  }

  // Méthode pour convertir l'ID de rôle en nom lisible
  String _getRoleName(int roleId) {
    switch (roleId) {
      case 1:
        return 'Membre';
      case 2:
        return 'Admin';
      case 9:
        return 'Super';
      default:
        return roleId.toString();
    }
  }
}
