import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../../core/api/api_client.dart'; import '../../../core/api/api_endpoints.dart'; import '../../../core/api/api_response.dart'; import '../domain/machine_detail.dart'; /// Dépôt de données machines (lookup, détail, créneaux). class MachineRepository { MachineRepository(this._apiClient); final ApiClient _apiClient; Future lookup({String? qrCode, String? machineUuid}) async { final response = await _apiClient.get( ApiEndpoints.machineLookup, queryParameters: { if (qrCode != null) 'qr_code': qrCode, if (machineUuid != null) 'machine_uuid': machineUuid, }, ); return MachineDetail.fromJson(ApiResponse.payload(response.data)); } Future fetchDetail(String uuid) async { final response = await _apiClient.get(ApiEndpoints.machine(uuid)); return MachineDetail.fromJson(ApiResponse.payload(response.data)); } Future> fetchAvailability(String uuid, DateTime date) async { final response = await _apiClient.get( ApiEndpoints.machineAvailability(uuid), queryParameters: {'date': date.toIso8601String().split('T').first}, ); final slots = ApiResponse.payload(response.data)['slots'] as List? ?? []; return slots.map((s) => TimeSlot.fromJson(s as Map)).toList(); } } final machineRepositoryProvider = Provider((ref) { return MachineRepository(ref.watch(apiClientProvider)); }); final machineDetailProvider = FutureProvider.family((ref, uuid) async { return ref.watch(machineRepositoryProvider).fetchDetail(uuid); }); final machineAvailabilityProvider = FutureProvider.family, ({String uuid, DateTime date})>((ref, params) async { return ref.watch(machineRepositoryProvider).fetchAvailability(params.uuid, params.date); });