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';

class FriendsScreenWithProvider extends StatelessWidget {
  final Logger _logger = Logger(); // Logger pour une meilleure traçabilité

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.black,
      appBar: FriendsAppBar(),
      body: SafeArea(
        child: Column(
          children: [
            const Padding(
              padding: EdgeInsets.all(8.0),
              child: SearchFriends(),
            ),
            Expanded(
              child: Consumer<FriendsProvider>(
                builder: (context, friendsProvider, _) {
                  final friends = friendsProvider.friendsList;

                  if (friends.isEmpty) {
                    _logger.i("[LOG] Aucun ami trouvé");
                    return const Center(
                      child: Text(
                        'Aucun ami trouvé',
                        style: TextStyle(color: Colors.white70),
                      ),
                    );
                  }

                  return ListView.builder(
                    physics: const BouncingScrollPhysics(),
                    itemCount: friends.length,
                    itemBuilder: (context, index) {
                      final friend = friends[index];
                      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);
                          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.friendId}",
                          onTap: () => _navigateToFriendDetail(context, friend),
                          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);
                          },
                        ),
                      );
                    },
                  );
                },
              ),
            ),
          ],
        ),
      ),
    );
  }

  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(
        name: friend.friendFirstName,
        imageUrl: friend.imageUrl ?? '',
        friendId: friend.friendId,
      ),
    ));
  }
}
