/// UnionFlow Info Card - Card d'information générique
///
/// Card blanche avec titre, icône et contenu personnalisable
library uf_info_card;

import 'package:flutter/material.dart';
import '../../unionflow_design_system.dart';

/// Card d'information générique
/// 
/// Usage:
/// ```dart
/// UFInfoCard(
///   title: 'État du système',
///   icon: Icons.health_and_safety,
///   iconColor: ColorTokens.primary,
///   trailing: Container(...), // Badge ou autre widget
///   child: Column(...), // Contenu de la card
/// )
/// ```
class UFInfoCard extends StatelessWidget {
  /// Titre de la card
  final String title;
  
  /// Icône du titre
  final IconData icon;
  
  /// Couleur de l'icône (par défaut: primary)
  final Color? iconColor;
  
  /// Widget à droite du titre (badge, bouton, etc.)
  final Widget? trailing;
  
  /// Contenu de la card
  final Widget child;
  
  /// Padding de la card (par défaut: xl)
  final EdgeInsets? padding;

  const UFInfoCard({
    super.key,
    required this.title,
    required this.icon,
    this.iconColor,
    this.trailing,
    required this.child,
    this.padding,
  });

  @override
  Widget build(BuildContext context) {
    final effectiveIconColor = iconColor ?? AppColors.primaryGreen;
    final effectivePadding = padding ?? const EdgeInsets.all(SpacingTokens.xl);

    return Container(
      padding: effectivePadding,
      decoration: BoxDecoration(
        color: Colors.white,
        borderRadius: BorderRadius.circular(SpacingTokens.radiusLg),
        boxShadow: ShadowTokens.sm,
      ),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          // Header avec titre et trailing
          Row(
            children: [
              Icon(icon, color: effectiveIconColor, size: 20),
              const SizedBox(width: SpacingTokens.md),
              Expanded(
                child: Text(
                  title,
                  style: AppTypography.headerSmall.copyWith(
                    color: AppColors.textPrimaryLight,
                  ),
                ),
              ),
              if (trailing != null) trailing!,
            ],
          ),
          const SizedBox(height: SpacingTokens.xl),
          // Contenu
          child,
        ],
      ),
    );
  }
}

