/// Widget de bouton d'action rapide individuel
/// Bouton stylisé pour les actions principales du dashboard
library dashboard_quick_action_button;

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 action rapide
class DashboardQuickAction {
  /// Icône représentative de l'action
  final IconData icon;

  /// Titre de l'action
  final String title;

  /// Sous-titre optionnel
  final String? subtitle;

  /// Couleur thématique du bouton
  final Color color;

  /// Callback lors du tap sur le bouton
  final VoidCallback? onTap;

  /// Constructeur du modèle d'action rapide
  const DashboardQuickAction({
    required this.icon,
    required this.title,
    this.subtitle,
    required this.color,
    this.onTap,
  });
}

/// Widget de bouton d'action rapide
/// 
/// Affiche un bouton stylisé avec :
/// - Icône thématique
/// - Titre descriptif
/// - Couleur de fond subtile
/// - Design Material avec bordures arrondies
/// - Support du tap pour actions
class DashboardQuickActionButton extends StatelessWidget {
  /// Données de l'action à afficher
  final DashboardQuickAction action;

  /// Constructeur du bouton d'action rapide
  const DashboardQuickActionButton({
    super.key,
    required this.action,
  });

  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: action.onTap,
      style: ElevatedButton.styleFrom(
        backgroundColor: action.color.withOpacity(0.1),
        foregroundColor: action.color,
        elevation: 0,
        padding: const EdgeInsets.symmetric(
          horizontal: SpacingTokens.sm,
          vertical: SpacingTokens.sm,
        ),
        shape: RoundedRectangleBorder(
          borderRadius: BorderRadius.circular(8.0),
        ),
      ),
      child: Column(
        mainAxisSize: MainAxisSize.min,
        children: [
          Icon(
            action.icon,
            size: 18,
          ),
          const SizedBox(height: 4),
          Text(
            action.title,
            style: const TextStyle(
              fontWeight: FontWeight.w600,
              fontSize: 12,
            ),
            textAlign: TextAlign.center,
          ),
          if (action.subtitle != null) ...[
            const SizedBox(height: 2),
            Text(
              action.subtitle!,
              style: TextStyle(
                fontSize: 10,
                color: action.color.withOpacity(0.7),
              ),
              textAlign: TextAlign.center,
            ),
          ],
        ],
      ),
    );
  }
}
