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

import '../../data/providers/friends_provider.dart';
import '../../data/models/friend_suggestion_model.dart';
import 'friend_suggestion_card.dart';

/// Widget pour afficher une liste de suggestions d'amis.
///
/// Ce widget charge et affiche automatiquement les suggestions d'amis
/// basées sur les amis en commun et d'autres critères.
///
/// **Principe WOU (Write Once Use) :** Ce widget encapsule toute la
/// logique de chargement et d'affichage, utilisable partout.
class FriendSuggestions extends StatefulWidget {
  const FriendSuggestions({
    this.maxSuggestions = 5,
    super.key,
  });

  /// Nombre maximum de suggestions à afficher
  final int maxSuggestions;

  @override
  State<FriendSuggestions> createState() => _FriendSuggestionsState();
}

class _FriendSuggestionsState extends State<FriendSuggestions> {
  @override
  void initState() {
    super.initState();
    // Charger les suggestions au démarrage
    WidgetsBinding.instance.addPostFrameCallback((_) {
      _loadSuggestions();
    });
  }

  Future<void> _loadSuggestions() async {
    final provider = Provider.of<FriendsProvider>(context, listen: false);
    try {
      await provider.fetchFriendSuggestions(limit: widget.maxSuggestions);
    } catch (e) {
      if (mounted) {
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(
            content: Text('Impossible de charger les suggestions: $e'),
            behavior: SnackBarBehavior.floating,
            backgroundColor: Colors.red,
          ),
        );
      }
    }
  }

  Future<void> _addFriend(BuildContext context, String friendId) async {
    final provider = Provider.of<FriendsProvider>(context, listen: false);

    try {
      await provider.addFriend(friendId);

      if (mounted) {
        ScaffoldMessenger.of(context).showSnackBar(
          const SnackBar(
            content: Text('Demande d\'ami envoyée avec succès'),
            behavior: SnackBarBehavior.floating,
            backgroundColor: Colors.green,
          ),
        );

        // Recharger les suggestions pour mettre à jour la liste
        await _loadSuggestions();
      }
    } catch (e) {
      if (mounted) {
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(
            content: Text('Erreur: ${e.toString()}'),
            behavior: SnackBarBehavior.floating,
            backgroundColor: Colors.red,
          ),
        );
      }
    }
  }

  @override
  Widget build(BuildContext context) {
    return Consumer<FriendsProvider>(
      builder: (context, provider, child) {
        // Afficher un loader pendant le chargement
        if (provider.isLoadingSuggestions) {
          return const Center(
            child: Padding(
              padding: EdgeInsets.all(20),
              child: CircularProgressIndicator(),
            ),
          );
        }

        // Afficher un message si aucune suggestion
        if (provider.friendSuggestions.isEmpty) {
          return const Padding(
            padding: EdgeInsets.all(20),
            child: Center(
              child: Text(
                'Aucune suggestion disponible pour le moment',
                style: TextStyle(color: Colors.grey),
              ),
            ),
          );
        }

        // Afficher la liste des suggestions
        return Column(
          mainAxisSize: MainAxisSize.min,
          children: provider.friendSuggestions.map((suggestion) {
            final suggestionModel = FriendSuggestionModel.fromJson(suggestion);
            return FriendSuggestionCard(
              suggestion: suggestion,
              onAddFriend: () => _addFriend(context, suggestionModel.userId),
            );
          }).toList(),
        );
      },
    );
  }
}
