import 'package:flutter/material.dart';
import 'package:logger/logger.dart';
import 'package:provider/provider.dart';
import '../../../assets/animations/friend_expanding_card.dart';
import '../../../data/providers/friends_provider.dart';
import '../../../domain/entities/friend.dart';
import '../../widgets/friend_detail_screen.dart';
import '../../widgets/friends_appbar.dart';
import '../../widgets/search_friends.dart';

/// Écran d'affichage des amis avec gestion des amis via un provider.
class FriendsScreenWithProvider extends StatelessWidget {
  FriendsScreenWithProvider({super.key});

  final Logger _logger = Logger(); // Logger pour la traçabilité détaillée.

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.black, // Fond noir pour une ambiance immersive.
      appBar: FriendsAppBar(), // AppBar personnalisé pour l'écran.
      body: SafeArea(
        child: Column(
          children: [
            const Padding(
              padding: EdgeInsets.all(8),
              child: SearchFriends(), // Barre de recherche pour trouver des amis.
            ),
            Expanded(
              child: Consumer<FriendsProvider>(
                builder: (context, friendsProvider, _) {
                  final friends = friendsProvider.friendsList;

                  if (friends.isEmpty) {
                    _logger.i('[LOG] Aucun ami trouvé.'); // Log pour la recherche sans résultat.
                    return const Center(
                      child: Text(
                        'Aucun ami trouvé', // Message affiché si aucun ami n'est trouvé.
                        style: TextStyle(color: Colors.white70),
                      ),
                    );
                  }

                  return ListView.builder(
                    physics: const BouncingScrollPhysics(),
                    itemCount: friends.length,
                    itemBuilder: (context, index) {
                      final friend = friends[index];

                      // Log lorsque chaque ami est affiché
                      _logger.i("[LOG] Affichage de l'ami : ${friend.friendFirstName ?? 'Ami inconnu'}");

                      return Dismissible(
                        key: Key(friend.friendId),
                        background: Container(
                          color: Colors.redAccent,
                          alignment: Alignment.centerLeft,
                          padding: const EdgeInsets.only(left: 20),
                          child: const Icon(Icons.delete, color: Colors.white),
                        ),
                        onDismissed: (direction) {
                          _logger.i("[LOG] Suppression de l'ami avec l'ID : ${friend.friendId}");
                          friendsProvider.removeFriend(friend.friendId); // Suppression de l'ami via le provider.
                          ScaffoldMessenger.of(context).showSnackBar(
                            SnackBar(content: Text('Ami supprimé : ${friend.friendFirstName}')),
                          );
                        },
                        child: FriendExpandingCard(
                          name: friend.friendFirstName ?? 'Ami inconnu',
                          imageUrl: friend.imageUrl ?? '',
                          description: "Amis depuis ${friend.dateAdded ?? 'Inconnu'}\nStatut : ${friend.status ?? 'Inconnu'}",
                          onTap: () {
                            _navigateToFriendDetail(context, friend); // Navigation vers les détails de l'ami.
                          },
                          onMessageTap: () {
                            _logger.i("[LOG] Envoi d'un message à l'ami : ${friend.friendFirstName ?? 'Ami inconnu'}");
                          },
                          onRemoveTap: () {
                            _logger.i("[LOG] Tentative de suppression de l'ami : ${friend.friendFirstName ?? 'Ami inconnu'}");
                            friendsProvider.removeFriend(friend.friendId); // Suppression via le provider.
                          },
                        ),
                      );
                    },
                  );
                },
              ),
            ),
          ],
        ),
      ),
    );
  }

  /// Navigue vers l'écran de détails de l'ami.
  void _navigateToFriendDetail(BuildContext context, Friend friend) {
    _logger.i("[LOG] Navigation vers les détails de l'ami : ${friend.friendFirstName}");

    Navigator.of(context).push(MaterialPageRoute(
      builder: (context) => FriendDetailScreen(
        friendId: friend.friendId,
        friendFirstName: friend.friendFirstName,
        friendLastName: friend.friendLastName,
        imageUrl: friend.imageUrl ?? '',
        status: friend.status,
        lastInteraction: friend.lastInteraction ?? 'Aucune',
        dateAdded: friend.dateAdded ?? 'Inconnu',
      ),
    ),);
  }
}
