import 'package:em2rp/services/api_service.dart'; import 'package:em2rp/repositories/event_repository.dart'; import 'package:em2rp/repositories/equipment_repository.dart'; import 'package:em2rp/repositories/container_repository.dart'; import 'package:em2rp/repositories/alert_repository.dart'; import 'package:em2rp/repositories/user_repository.dart'; import 'package:em2rp/repositories/option_repository.dart'; /// Service façade pour rétrocompatibilité. /// Délègue les opérations aux Repositories de domaine respectifs. class DataService { final EventRepository eventRepository; final EquipmentRepository equipmentRepository; final ContainerRepository containerRepository; final AlertRepository alertRepository; final UserRepository userRepository; final OptionRepository optionRepository; DataService(ApiService apiService) : eventRepository = EventRepository(apiService), equipmentRepository = EquipmentRepository(apiService), containerRepository = ContainerRepository(apiService), alertRepository = AlertRepository(apiService), userRepository = UserRepository(apiService), optionRepository = OptionRepository(apiService); // ============================================================================ // OPTIONS & METADATA (delegated to OptionRepository) // ============================================================================ Future>> getOptions() => optionRepository.getOptions(); Future>> getEventTypes() => optionRepository.getEventTypes(); Future createEventType({required String name, required double defaultPrice}) => optionRepository.createEventType(name: name, defaultPrice: defaultPrice); Future updateEventType({required String eventTypeId, String? name, double? defaultPrice}) => optionRepository.updateEventType(eventTypeId: eventTypeId, name: name, defaultPrice: defaultPrice); Future deleteEventType(String eventTypeId) => optionRepository.deleteEventType(eventTypeId); Future createOption(String code, Map data) => optionRepository.createOption(code, data); Future updateOption(String optionId, Map data) => optionRepository.updateOption(optionId, data); Future deleteOption(String optionId) => optionRepository.deleteOption(optionId); // ============================================================================ // EVENTS (delegated to EventRepository) // ============================================================================ Future updateEventEquipment({ required String eventId, List>? assignedEquipment, String? preparationStatus, String? loadingStatus, String? unloadingStatus, String? returnStatus, }) => eventRepository.updateEventEquipment( eventId: eventId, assignedEquipment: assignedEquipment, preparationStatus: preparationStatus, loadingStatus: loadingStatus, unloadingStatus: unloadingStatus, returnStatus: returnStatus, ); Future updateEvent(String eventId, Map data) => eventRepository.updateEvent(eventId, data); Future deleteEvent(String eventId) => eventRepository.deleteEvent(eventId); Future>> getEventsByEventType(String eventTypeId) => eventRepository.getEventsByEventType(eventTypeId); Future> getEvents({String? userId}) => eventRepository.getEvents(userId: userId); Future> getEventsByMonth({required String userId, required int year, required int month}) => eventRepository.getEventsByMonth(userId: userId, year: year, month: month); Future>> searchEvents({required String userId, required String query, int limit = 20}) => eventRepository.searchEvents(userId: userId, query: query, limit: limit); Future> getEventWithDetails(String eventId) => eventRepository.getEventWithDetails(eventId); // ============================================================================ // EQUIPMENTS & AVAILABILITY (delegated to EquipmentRepository) // ============================================================================ Future>> getEquipments() => equipmentRepository.getEquipments(); Future>> getEquipmentsByIds(List equipmentIds) => equipmentRepository.getEquipmentsByIds(equipmentIds); Future> getEquipmentsPaginated({ int limit = 20, String? startAfter, String? category, String? status, String? searchQuery, String sortBy = 'id', String sortOrder = 'asc', }) => equipmentRepository.getEquipmentsPaginated( limit: limit, startAfter: startAfter, category: category, status: status, searchQuery: searchQuery, sortBy: sortBy, sortOrder: sortOrder, ); Future createEquipment(String equipmentId, Map data) => equipmentRepository.createEquipment(equipmentId, data); Future updateEquipment(String equipmentId, Map data) => equipmentRepository.updateEquipment(equipmentId, data); Future deleteEquipment(String equipmentId, {bool forceDelete = false}) => equipmentRepository.deleteEquipment(equipmentId, forceDelete: forceDelete); Future updateEquipmentStatusOnly({required String equipmentId, String? status, int? availableQuantity}) => equipmentRepository.updateEquipmentStatusOnly( equipmentId: equipmentId, status: status, availableQuantity: availableQuantity, ); Future>> searchEquipmentsForAssistant({required String query, int limit = 12}) => equipmentRepository.searchEquipmentsForAssistant(query: query, limit: limit); Future> checkEquipmentAvailabilityForAssistant({ required String equipmentId, required DateTime startDate, required DateTime endDate, String? excludeEventId, }) => equipmentRepository.checkEquipmentAvailabilityForAssistant( equipmentId: equipmentId, startDate: startDate, endDate: endDate, excludeEventId: excludeEventId, ); Future> checkEquipmentAvailability({ required String equipmentId, required DateTime startDate, required DateTime endDate, String? excludeEventId, }) => equipmentRepository.checkEquipmentAvailability( equipmentId: equipmentId, startDate: startDate, endDate: endDate, excludeEventId: excludeEventId, ); Future> getConflictingEquipmentIds({ required DateTime startDate, required DateTime endDate, String? excludeEventId, int installationTime = 0, int disassemblyTime = 0, }) => equipmentRepository.getConflictingEquipmentIds( startDate: startDate, endDate: endDate, excludeEventId: excludeEventId, installationTime: installationTime, disassemblyTime: disassemblyTime, ); Future>> getMaintenances({String? equipmentId}) => equipmentRepository.getMaintenances(equipmentId: equipmentId); Future deleteMaintenance(String maintenanceId) => equipmentRepository.deleteMaintenance(maintenanceId); // ============================================================================ // CONTAINERS (delegated to ContainerRepository) // ============================================================================ Future>> getContainers() => containerRepository.getContainers(); Future>> getContainersByIds(List containerIds) => containerRepository.getContainersByIds(containerIds); Future> getContainersPaginated({ int limit = 20, String? startAfter, String? type, String? status, String? searchQuery, String? category, String sortBy = 'id', String sortOrder = 'asc', }) => containerRepository.getContainersPaginated( limit: limit, startAfter: startAfter, type: type, status: status, searchQuery: searchQuery, category: category, sortBy: sortBy, sortOrder: sortOrder, ); Future>> getContainersByEquipment(String equipmentId) => containerRepository.getContainersByEquipment(equipmentId); Future> checkContainerAvailability({ required String containerId, required DateTime startDate, required DateTime endDate, String? excludeEventId, }) => containerRepository.checkContainerAvailability( containerId: containerId, startDate: startDate, endDate: endDate, excludeEventId: excludeEventId, ); // ============================================================================ // USERS (delegated to UserRepository) // ============================================================================ Future> getCurrentUser() => userRepository.getCurrentUser(); Future>> getUsers() => userRepository.getUsers(); Future> getUser(String userId) => userRepository.getUser(userId); Future deleteUser(String userId) => userRepository.deleteUser(userId); Future updateUser(String userId, Map data) => userRepository.updateUser(userId, data); Future> createUserWithInvite({ required String email, required String firstName, required String lastName, String? phoneNumber, required String roleId, }) => userRepository.createUserWithInvite( email: email, firstName: firstName, lastName: lastName, phoneNumber: phoneNumber, roleId: roleId, ); Future>> getRoles() => userRepository.getRoles(); // ============================================================================ // ALERTS (delegated to AlertRepository) // ============================================================================ Future>> getAlerts() => alertRepository.getAlerts(); Future markAlertAsRead(String alertId) => alertRepository.markAlertAsRead(alertId); Future deleteAlert(String alertId) => alertRepository.deleteAlert(alertId); }