import 'package:flutter/material.dart';

import '../../core/constants/env_config.dart';

/// Widget de recherche d'amis avec design moderne et compact.
///
/// Ce widget permet à l'utilisateur de rechercher des amis avec un champ
/// de texte stylisé et une icône de nettoyage.
///
/// **Usage:**
/// ```dart
/// SearchFriends(
///   onSearchChanged: (query) => filterFriends(query),
/// )
/// ```
class SearchFriends extends StatefulWidget {
  const SearchFriends({
    super.key,
    this.onSearchChanged,
    this.hintText = 'Rechercher un ami...',
  });

  /// Callback appelé lorsque la recherche change
  final ValueChanged<String>? onSearchChanged;

  /// Texte d'indication
  final String hintText;

  @override
  State<SearchFriends> createState() => _SearchFriendsState();
}

class _SearchFriendsState extends State<SearchFriends> {
  final TextEditingController _controller = TextEditingController();

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

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

    return TextField(
      controller: _controller,
      decoration: _buildDecoration(theme),
      style: theme.textTheme.bodyMedium,
      onChanged: _handleSearchChanged,
      textInputAction: TextInputAction.search,
    );
  }

  /// Construit la décoration du champ de recherche.
  InputDecoration _buildDecoration(ThemeData theme) {
    return InputDecoration(
      hintText: widget.hintText,
      hintStyle: theme.textTheme.bodyMedium?.copyWith(
        color: theme.colorScheme.onSurface.withOpacity(0.5),
      ),
      filled: true,
      fillColor: theme.colorScheme.surfaceVariant.withOpacity(0.5),
      prefixIcon: Icon(
        Icons.search,
        color: theme.colorScheme.onSurface.withOpacity(0.6),
        size: 20,
      ),
      suffixIcon: _controller.text.isNotEmpty
          ? IconButton(
              icon: Icon(
                Icons.clear,
                color: theme.colorScheme.onSurface.withOpacity(0.6),
                size: 20,
              ),
              onPressed: _clearSearch,
              padding: EdgeInsets.zero,
              constraints: const BoxConstraints(),
            )
          : null,
      border: OutlineInputBorder(
        borderRadius: BorderRadius.circular(24),
        borderSide: BorderSide.none,
      ),
      contentPadding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12),
    );
  }

  /// Gère le changement de recherche.
  void _handleSearchChanged(String value) {
    setState(() {}); // Met à jour l'UI pour afficher/masquer l'icône clear

    if (EnvConfig.enableDetailedLogs) {
      debugPrint('[SearchFriends] Recherche: $value');
    }

    widget.onSearchChanged?.call(value);
  }

  /// Nettoie le champ de recherche.
  void _clearSearch() {
    _controller.clear();
    setState(() {});
    widget.onSearchChanged?.call('');
  }
}
