import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/material.dart'; import 'package:prosapp_web_app/models/comment_entity.dart'; import 'package:prosapp_web_app/models/profesional.dart'; import 'package:prosapp_web_app/models/usuario.dart'; import 'package:prosapp_web_app/models/usuario_profesional.dart'; class ProfessionalDetailProvider extends ChangeNotifier { UsuarioProfesional? professional; bool isLoading = true; Future getProfessionalById(String uid) async { try { isLoading = true; notifyListeners(); final userDoc = await FirebaseFirestore.instance.collection('users').doc(uid).get(); if (!userDoc.exists) { print('Profesional no encontrado.'); return; } final user = Usuario.fromDocument(userDoc.data()!); final professionalDoc = await FirebaseFirestore.instance .collection('professional_info') .doc(uid) .get(); if (!professionalDoc.exists) { print('Información profesional no encontrada.'); return; } final professionalInfo = Profesional.fromDocument(professionalDoc.data()!); final averageScore = await _getAverageScore(uid); professional = UsuarioProfesional( user: user, professionalInfo: professionalInfo, averageScore: averageScore, ); } catch (e) { print('Error obteniendo profesional: $e'); } finally { isLoading = false; notifyListeners(); } } Future _getAverageScore(String userId) async { final querySnapshot = await FirebaseFirestore.instance .collection('comments') .where('destination_id', isEqualTo: userId) .where('is_from_user', isEqualTo: true) .get(); if (querySnapshot.docs.isEmpty) { return 0.0; } final scores = querySnapshot.docs .map((e) => CommentEntity.fromDocument(e.data()).score) .toList(); final averageScore = scores.reduce((a, b) => a + b) / scores.length; return averageScore; } }