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

/// [FriendDetailScreen] affiche les détails d'un ami, incluant son nom, son image de profil,
/// et une option pour envoyer un message.
///
/// Utilisé lorsque l'utilisateur clique sur un ami pour voir plus de détails.
class FriendDetailScreen extends StatelessWidget {
  final String name; // Nom de l'ami
  final String imageUrl; // URL de l'image de profil de l'ami
  final String friendId; // ID de l'ami pour des actions futures
  final Logger _logger = Logger(); // Logger pour suivre les actions dans le terminal

  /// Constructeur de la classe [FriendDetailScreen].
  /// [name], [imageUrl], et [friendId] doivent être fournis.
  FriendDetailScreen({
    Key? key,
    required this.name,
    required this.imageUrl,
    required this.friendId,
  }) : super(key: key);

  /// Méthode statique pour lancer l'écran des détails d'un ami.
  static void open(BuildContext context, String friendId, String name, String imageUrl) {
    Navigator.push(
      context,
      MaterialPageRoute(
        builder: (_) => FriendDetailScreen(
          friendId: friendId,
          name: name,
          imageUrl: imageUrl,
        ),
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    _logger.i('[LOG] Affichage des détails de l\'ami : $name (ID: $friendId)');

    // Utilise `AssetImage` si `imageUrl` est vide ou ne contient pas d'URL valide.
    final imageProvider = imageUrl.isNotEmpty && Uri.tryParse(imageUrl)?.hasAbsolutePath == true
        ? NetworkImage(imageUrl)
        : const AssetImage('lib/assets/images/default_avatar.png') as ImageProvider;

    return Scaffold(
      appBar: AppBar(
        title: Text(name), // Titre de l'écran affichant le nom de l'ami
        backgroundColor: Colors.grey.shade800,
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0), // Espacement autour du contenu
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            // Affichage de l'image de l'ami avec animation `Hero`
            Hero(
              tag: friendId, // Tag unique pour l'animation Hero basée sur l'ID de l'ami
              child: CircleAvatar(
                radius: 50,
                backgroundImage: imageProvider,
                backgroundColor: Colors.grey.shade800,
                onBackgroundImageError: (error, stackTrace) {
                  _logger.e('[ERROR] Erreur lors du chargement de l\'image pour $name (ID: $friendId): $error');
                },
                child: imageUrl.isEmpty
                    ? const Icon(Icons.person, size: 50, color: Colors.white) // Icône par défaut si aucune image n'est disponible
                    : null,
              ),
            ),
            const SizedBox(height: 16), // Espacement entre l'image et le texte

            // Affichage du nom de l'ami
            Text(
              name,
              style: const TextStyle(
                fontSize: 24, // Taille de la police pour le nom
                fontWeight: FontWeight.bold, // Texte en gras
                color: Colors.white,
              ),
            ),
            const SizedBox(height: 20), // Espacement avant le bouton

            // Bouton pour envoyer un message à l'ami
            ElevatedButton.icon(
              onPressed: () {
                _logger.i('[LOG] Envoi d\'un message à $name (ID: $friendId)');
                // Logique future pour envoyer un message à l'ami
              },
              icon: const Icon(Icons.message),
              label: const Text('Envoyer un message'),
              style: ElevatedButton.styleFrom(
                backgroundColor: Colors.teal, // Couleur de fond du bouton
                foregroundColor: Colors.white, // Couleur du texte et de l'icône
                shape: RoundedRectangleBorder(
                  borderRadius: BorderRadius.circular(20),
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }
}
