import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:em2rp/providers/users_provider.dart';

class ProfilePictureWidget extends StatefulWidget {
  final String? userId;
  final double radius;
  final String? defaultImageUrl;
  final String? profilePhotoUrl; // URL directe de la photo (optionnel)

  const ProfilePictureWidget({
    super.key,
    this.userId,
    this.radius = 20,
    this.defaultImageUrl,
    this.profilePhotoUrl, // Si fourni, utilisé directement sans appeler UsersProvider
  });

  @override
  State<ProfilePictureWidget> createState() => _ProfilePictureWidgetState();
}

class _ProfilePictureWidgetState extends State<ProfilePictureWidget> {
  @override
  Widget build(BuildContext context) {
    // Si profilePhotoUrl est fourni directement, l'utiliser sans appeler le provider
    if (widget.profilePhotoUrl != null && widget.profilePhotoUrl!.isNotEmpty) {
      return CircleAvatar(
        radius: widget.radius,
        backgroundImage: CachedNetworkImageProvider(widget.profilePhotoUrl!),
        onBackgroundImageError: (_, __) {
          // En cas d'erreur, afficher l'image par défaut
        },
      );
    }

    if (widget.userId == null || widget.userId!.isEmpty) {
      return _buildDefaultAvatar(widget.radius, widget.defaultImageUrl);
    }

    // Utiliser le provider pour récupérer l'utilisateur
    final usersProvider = context.watch<UsersProvider>();
    final user = usersProvider.getUserById(widget.userId!);

    if (user == null) {
      return _buildDefaultAvatar(widget.radius, widget.defaultImageUrl);
    }

    final profilePhotoUrl = user.profilePhotoUrl;

    if (profilePhotoUrl.isEmpty) {
      return _buildDefaultAvatar(widget.radius, widget.defaultImageUrl);
    }

    return CircleAvatar(
      radius: widget.radius,
      backgroundImage: CachedNetworkImageProvider(profilePhotoUrl),
      onBackgroundImageError: (_, __) {
        // En cas d'erreur, afficher l'image par défaut
      },
    );
  }

  Widget _buildDefaultAvatar(double radius, String? defaultImageUrl) {
    return CircleAvatar(
      radius: radius,
      backgroundImage: defaultImageUrl != null && defaultImageUrl.isNotEmpty
          ? CachedNetworkImageProvider(defaultImageUrl)
          : null,
      child: defaultImageUrl == null || defaultImageUrl.isEmpty
          ? Icon(Icons.person, size: radius)
          : null,
    );
  }
}

