import 'package:dio/dio.dart'; import 'package:eatvio_app/core/enums/filters_comparison_enum.dart'; import 'package:eatvio_app/features/consultations/models/consultation_model.dart'; import 'package:eatvio_app/features/finances_and_consultations_archive/models/consultant_finance_model.dart'; import 'package:eatvio_app/features/finances_and_consultations_archive/models/statistic_model.dart'; import 'package:eatvio_app/features/finances_and_consultations_archive/models/user_purchases_model.dart'; class ConsultationService { final Dio dio; ConsultationService(this.dio); Future getConsultations() async { try { final response = await dio.get('/api/consultations', queryParameters: { 'filters[last_state][\$notIn][]': const [ 'initied', 'in_coordination', 'start_date_has_been_set', 'pending_payment', 'canceled_by_the_initiator', 'charge_was_collected', ], 'sort[]': 'created_at:desc' }); return ConsultationPaginationModel.fromJson(response.data); } catch (e) { rethrow; } } Future getFilteredConsultations({ String? state, String? date, FiltersComparisonEnum? stateComparison, FiltersComparisonEnum? dateComparison, }) async { try { final response = await dio.get( '/api/consultations', queryParameters: { if (stateComparison == FiltersComparisonEnum.notInArray) 'filters[last_state][\$notIn][]': const [ 'initied', 'in_coordination', 'start_date_has_been_set', 'pending_payment', 'canceled_by_the_initiator', 'charge_was_collected', ] else if (state != null && stateComparison != null) 'filters[last_state][${stateComparison.value}]': state, if (dateComparison != null && date != null) 'filters[start_date][${dateComparison.value}]': date, }, ); return ConsultationPaginationModel.fromJson(response.data); } catch (e) { rethrow; } } Future getStatistics() async { try { final response = await dio.get( '/api/consultations/statistics', ); return StatisticModel.fromJson(response.data); } catch (e) { rethrow; } } Future> getConsultantFinances( String? date, FiltersComparisonEnum? dateComparison, ) async { try { final response = await dio.get( '/api/finances/my_finances', queryParameters: { if (dateComparison != null && date != null) 'filters[end_date]': date, }, ); final data = response.data as Map; final consultations = data['data'] as List; return consultations.map((consultation) => ConsultantFinanceModel.fromJson(consultation as Map)).toList(); } catch (e) { rethrow; } } Future> getUserPurchases( String? date, FiltersComparisonEnum? dateComparison, ) async { try { final response = await dio.get( '/api/finances/my_purchases', queryParameters: { if (dateComparison != null && date != null) 'filters[start_date]': date, }, ); final data = response.data as Map; final purchases = data['data'] as List; return purchases.map((purchase) => UserPurchasesModel.fromJson(purchase as Map)).toList(); } catch (e) { rethrow; } } }