import 'package:flutter/material.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:prosapp_web_app/models/service.dart'; import 'package:prosapp_web_app/models/servicio_profesional.dart'; import 'package:prosapp_web_app/models/usuario.dart'; class CalendarServicesProvider extends ChangeNotifier { List services = []; ServicioProfesional? service; bool isLoading = true; final _servicesCollection = FirebaseFirestore.instance.collection('services'); final _usersCollection = FirebaseFirestore.instance.collection('users'); void logout() { services = []; service = null; isLoading = false; notifyListeners(); } getServicesForProfessional(String userId) async { try { isLoading = true; final queryServices = await _servicesCollection .where('professional_id', isEqualTo: userId) .where('status', whereIn: [1, 3]).get(); final servicios = queryServices.docs.map(Service.fromDocument).toList(); final userIds = servicios.map((service) => service.userId).toList(); final queryUsers = await _usersCollection .where(FieldPath.documentId, whereIn: userIds) .get(); final users = queryUsers.docs.map((e) => Usuario.fromDocument(e.data())).toList(); final usersMap = {for (var doc in users) doc.id: doc}; final servicesMap = (servicios.map((service) { final user = usersMap[service.userId]; return ServicioProfesional( user: user!, service: service, ); }).toList()); services = servicesMap ..sort((a, b) { final dateA = DateTime.parse(a.service.day); final dateB = DateTime.parse(b.service.day); final range1A = a.service.range1Hour1.hour * 60 + a.service.range1Hour1.minute; final range1B = b.service.range1Hour1.hour * 60 + b.service.range1Hour1.minute; if (dateA.compareTo(dateB) != 0) { return dateA.compareTo(dateB); } else { return range1A.compareTo(range1B); } }); } catch (e) { print('Error obteniendo servicios: $e'); } finally { isLoading = false; notifyListeners(); } } }