/// UnionFlow Dropdown Tile - Ligne de paramètre avec dropdown
/// 
/// Tile avec titre et dropdown pour les paramètres
library uf_dropdown_tile;

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

/// Tile de paramètre avec dropdown
/// 
/// Usage:
/// ```dart
/// UFDropdownTile<String>(
///   title: 'Niveau de log',
///   value: 'INFO',
///   items: ['TRACE', 'DEBUG', 'INFO', 'WARN', 'ERROR'],
///   onChanged: (value) => setState(() => _logLevel = value),
/// )
/// ```
class UFDropdownTile<T> extends StatelessWidget {
  /// Titre du paramètre
  final String title;
  
  /// Valeur actuelle
  final T value;
  
  /// Liste des options
  final List<T> items;
  
  /// Callback appelé lors du changement
  final ValueChanged<T?>? onChanged;
  
  /// Couleur de fond (par défaut: surfaceVariant)
  final Color? backgroundColor;
  
  /// Fonction pour afficher le texte d'un item (par défaut: toString())
  final String Function(T)? itemBuilder;

  const UFDropdownTile({
    super.key,
    required this.title,
    required this.value,
    required this.items,
    this.onChanged,
    this.backgroundColor,
    this.itemBuilder,
  });

  @override
  Widget build(BuildContext context) {
    final isDark = Theme.of(context).brightness == Brightness.dark;
    final effectiveBgColor = backgroundColor ??
        (isDark ? AppColors.surfaceDark : AppColors.surface);
    final effectiveItemBuilder = itemBuilder ?? (item) => item.toString();

    return Container(
      margin: const EdgeInsets.only(bottom: SpacingTokens.lg),
      padding: const EdgeInsets.all(SpacingTokens.lg),
      decoration: BoxDecoration(
        color: effectiveBgColor,
        borderRadius: BorderRadius.circular(SpacingTokens.radiusLg),
      ),
      child: Row(
        children: [
          Expanded(
            child: Text(
              title,
              style: AppTypography.bodyTextSmall.copyWith(
                fontWeight: FontWeight.w600,
                color: isDark ? AppColors.textPrimaryDark : AppColors.textPrimary,
              ),
            ),
          ),
          Container(
            padding: const EdgeInsets.symmetric(horizontal: SpacingTokens.lg),
            decoration: BoxDecoration(
              color: isDark ? AppColors.backgroundDark : Colors.white,
              borderRadius: BorderRadius.circular(SpacingTokens.radiusMd),
              border: Border.all(color: isDark ? AppColors.borderDark : AppColors.border),
            ),
            child: DropdownButtonHideUnderline(
              child: DropdownButton<T>(
                value: value,
                onChanged: onChanged,
                items: items.map((item) {
                  return DropdownMenuItem<T>(
                    value: item,
                    child: Text(effectiveItemBuilder(item)),
                  );
                }).toList(),
              ),
            ),
          ),
        ],
      ),
    );
  }
}

