/// Widget de carte de statistique individuelle
/// Affiche une métrique avec icône, valeur et titre
library dashboard_stats_card;

import 'package:flutter/material.dart';
import '../../../../core/design_system/tokens/color_tokens.dart';
import '../../../../core/design_system/tokens/spacing_tokens.dart';
import '../../../../core/design_system/tokens/typography_tokens.dart';

/// Modèle de données pour une statistique
class DashboardStat {
  /// Icône représentative de la statistique
  final IconData icon;
  
  /// Valeur numérique à afficher
  final String value;
  
  /// Titre descriptif de la statistique
  final String title;
  
  /// Couleur thématique de la carte
  final Color color;
  
  /// Callback optionnel lors du tap sur la carte
  final VoidCallback? onTap;

  /// Constructeur du modèle de statistique
  const DashboardStat({
    required this.icon,
    required this.value,
    required this.title,
    required this.color,
    this.onTap,
  });
}

/// Widget de carte de statistique
/// 
/// Affiche une métrique individuelle avec :
/// - Icône colorée thématique
/// - Valeur numérique mise en évidence
/// - Titre descriptif
/// - Design Material avec élévation subtile
/// - Support du tap pour navigation
class DashboardStatsCard extends StatelessWidget {
  /// Données de la statistique à afficher
  final DashboardStat stat;

  /// Constructeur de la carte de statistique
  const DashboardStatsCard({
    super.key,
    required this.stat,
  });

  @override
  Widget build(BuildContext context) {
    return Card(
      elevation: 1,
      child: InkWell(
        onTap: stat.onTap,
        borderRadius: BorderRadius.circular(SpacingTokens.radiusMd),
        child: Padding(
          padding: const EdgeInsets.all(SpacingTokens.md),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Icon(
                stat.icon,
                size: 28,
                color: stat.color,
              ),
              const SizedBox(height: SpacingTokens.sm),
              Text(
                stat.value,
                style: TypographyTokens.headlineSmall.copyWith(
                  fontWeight: FontWeight.w700,
                  color: stat.color,
                ),
              ),
              const SizedBox(height: SpacingTokens.xs),
              Text(
                stat.title,
                style: TypographyTokens.bodySmall.copyWith(
                  color: ColorTokens.onSurfaceVariant,
                ),
                textAlign: TextAlign.center,
              ),
            ],
          ),
        ),
      ),
    );
  }
}
