import 'package:flutter/material.dart';

class AdminUserCard extends StatefulWidget {
  final String title;
  final List<String> subtitleLines;
  final String? avatarUrl;
  final IconData fallbackIcon;
  final List<Widget> actions;
  final Color? borderColor;
  final Color? backgroundColor;
  final Color? titleColor;
  final Color? infoColor;

  const AdminUserCard({
    super.key,
    required this.title,
    required this.subtitleLines,
    this.avatarUrl,
    this.fallbackIcon = Icons.person,
    this.actions = const [],
    this.borderColor,
    this.backgroundColor,
    this.titleColor,
    this.infoColor,
  });

  @override
  State<AdminUserCard> createState() => _AdminUserCardState();
}

class _AdminUserCardState extends State<AdminUserCard> {
  bool _isHovered = false;

  @override
  Widget build(BuildContext context) {
    final infoLine =
        widget.subtitleLines.where((e) => e.trim().isNotEmpty).join('   ');
    final actionsWidth =
        widget.actions.isNotEmpty ? widget.actions.length * 30.0 : 0.0;

    return MouseRegion(
      onEnter: (_) => setState(() => _isHovered = true),
      onExit: (_) => setState(() => _isHovered = false),
      child: Material(
        color: Colors.transparent,
        borderRadius: BorderRadius.circular(10),
        child: InkWell(
          onTap: () {},
          borderRadius: BorderRadius.circular(10),
          hoverColor: const Color(0x149CC5C0),
          child: Card(
            margin: const EdgeInsets.only(bottom: 12),
            elevation: 0,
            color: widget.backgroundColor,
            shape: RoundedRectangleBorder(
              borderRadius: BorderRadius.circular(10),
              side: BorderSide(color: widget.borderColor ?? Colors.grey.shade300),
            ),
            child: Padding(
              padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 9),
              child: Row(
                children: [
                  CircleAvatar(
                    radius: 14,
                    backgroundColor: const Color(0xFFEDE5FA),
                    backgroundImage: widget.avatarUrl != null
                        ? NetworkImage(widget.avatarUrl!)
                        : null,
                    child: widget.avatarUrl == null
                        ? Icon(
                            widget.fallbackIcon,
                            size: 16,
                            color: const Color(0xFF6B3FA0),
                          )
                        : null,
                  ),
                  const SizedBox(width: 10),
                  Expanded(
                    child: Row(
                      children: [
                        Flexible(
                          fit: FlexFit.loose,
                          child: Text(
                            widget.title.isNotEmpty ? widget.title : 'Sans nom',
                            style: const TextStyle(
                              fontWeight: FontWeight.w600,
                              fontSize: 14,
                            ).copyWith(color: widget.titleColor),
                            maxLines: 1,
                            overflow: TextOverflow.ellipsis,
                          ),
                        ),
                        const SizedBox(width: 10),
                        Expanded(
                          child: Text(
                            infoLine,
                            style: const TextStyle(
                              color: Colors.black54,
                              fontSize: 12,
                            ).copyWith(color: widget.infoColor),
                            maxLines: 1,
                            overflow: TextOverflow.ellipsis,
                          ),
                        ),
                      ],
                    ),
                  ),
                  if (widget.actions.isNotEmpty)
                    SizedBox(
                      width: actionsWidth,
                      child: AnimatedOpacity(
                        duration: const Duration(milliseconds: 120),
                        opacity: _isHovered ? 1 : 0,
                        child: IgnorePointer(
                          ignoring: !_isHovered,
                          child: IconTheme(
                            data: const IconThemeData(size: 17),
                            child: IconButtonTheme(
                              data: IconButtonThemeData(
                                style: IconButton.styleFrom(
                                  visualDensity: VisualDensity.compact,
                                  padding: const EdgeInsets.all(4),
                                  minimumSize: const Size(28, 28),
                                ),
                              ),
                              child: Row(
                                mainAxisSize: MainAxisSize.min,
                                children: widget.actions,
                              ),
                            ),
                          ),
                        ),
                      ),
                    ),
                ],
              ),
            ),
          ),
        ),
      ),
    );
  }
}
