import 'package:flutter/material.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'; import 'package:prosapp_web_app/services/api_service.dart'; class CalendarServicesProvider extends ChangeNotifier { List services = []; ServicioProfesional? service; bool isLoading = true; final _api = ApiService.instance; void logout() { services = []; service = null; isLoading = false; notifyListeners(); } getServicesForProfessional(String userId) async { try { isLoading = true; final data = await _api.get('/services/professional/calendar') as List; final servicios = data.map((e) { final m = e as Map; return Service.fromJson(m, m['id'] as String); }).toList(); final ids = servicios.map((s) => s.userId).toSet().toList(); final users = await Future.wait(ids.map((id) async { final u = await _api.get('/users/$id'); return Usuario.fromDocument(u as Map); })); final usersMap = {for (var u in users) u.id: u}; services = servicios .map((s) => ServicioProfesional(user: usersMap[s.userId]!, service: s)) .toList() ..sort((a, b) { final dateA = DateTime.parse(a.service.day); final dateB = DateTime.parse(b.service.day); if (dateA != dateB) return dateA.compareTo(dateB); final tA = a.service.range1Hour1.hour * 60 + a.service.range1Hour1.minute; final tB = b.service.range1Hour1.hour * 60 + b.service.range1Hour1.minute; return tA.compareTo(tB); }); } catch (e) { print('Error obteniendo servicios: $e'); } finally { isLoading = false; notifyListeners(); } } }