import 'package:flutter/material.dart';

/// En-tête de section avec icône et support du thème.
///
/// Ce widget fournit un en-tête cohérent pour les sections de l'application,
/// utilisant automatiquement les couleurs du thème actif.
///
/// **Usage:**
/// ```dart
/// SectionHeader(
///   title: 'Événements',
///   icon: Icons.event,
/// )
/// ```
class SectionHeader extends StatelessWidget {
  /// Crée un nouveau [SectionHeader].
  ///
  /// [title] Le titre de la section
  /// [icon] L'icône à afficher
  /// [textStyle] Style de texte personnalisé (optionnel)
  /// [iconColor] Couleur de l'icône (optionnel)
  /// [onTap] Fonction à exécuter lors du clic (optionnel)
  /// [trailing] Widget optionnel à afficher à droite
  const SectionHeader({
    required this.title,
    required this.icon,
    super.key,
    this.textStyle,
    this.iconColor,
    this.onTap,
    this.trailing,
  });

  /// Le titre de la section
  final String title;

  /// L'icône à afficher
  final IconData icon;

  /// Style de texte personnalisé (optionnel)
  final TextStyle? textStyle;

  /// Couleur de l'icône (optionnel)
  final Color? iconColor;

  /// Fonction à exécuter lors du clic (optionnel)
  final VoidCallback? onTap;

  /// Widget optionnel à afficher à droite
  final Widget? trailing;

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

    final defaultTextStyle = theme.textTheme.titleLarge?.copyWith(
      fontWeight: FontWeight.bold,
      color: theme.colorScheme.onSurface,
    );

    Widget headerContent = Row(
      children: [
        Icon(
          icon,
          color: iconColor ?? theme.colorScheme.primary,
          size: 24,
        ),
        const SizedBox(width: 12),
        Expanded(
          child: Text(
            title,
            style: textStyle ?? defaultTextStyle,
          ),
        ),
        if (trailing != null) trailing!,
      ],
    );

    if (onTap != null) {
      return InkWell(
        onTap: onTap,
        borderRadius: BorderRadius.circular(8),
        child: Padding(
          padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 4),
          child: headerContent,
        ),
      );
    }

    return Padding(
      padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 4),
      child: headerContent,
    );
  }
}

