import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../../core/models/analytics.dart'; import '../../../core/models/vehicle.dart'; import '../../../core/models/reservation.dart'; import '../../../core/models/customer.dart'; import '../../../core/models/notification.dart'; import '../../../core/models/offer.dart'; import '../../../core/models/settings.dart'; import '../../../core/models/report.dart'; import '../../../core/services/analytics_service.dart'; import '../../../core/services/vehicle_service.dart'; import '../../../core/services/reservation_service.dart'; import '../../../core/services/customer_service.dart'; import '../../../core/services/notification_service.dart'; import '../../../core/services/offer_service.dart'; import '../../../core/services/settings_service.dart'; import '../../../core/services/payment_service.dart'; import '../../../core/services/team_service.dart'; import '../../../core/services/contract_service.dart'; // ─── Service providers ──────────────────────────────────────── final analyticsServiceProvider = Provider((_) => AnalyticsService()); final vehicleServiceProvider = Provider((_) => VehicleService()); final reservationServiceProvider = Provider((_) => ReservationService()); final customerServiceProvider = Provider((_) => CustomerService()); final notificationServiceProvider = Provider((_) => NotificationService()); final offerServiceProvider = Provider((_) => OfferService()); final settingsServiceProvider = Provider((_) => SettingsService()); // ─── Analytics ──────────────────────────────────────────────── final dashboardMetricsProvider = FutureProvider((ref) async { return ref.read(analyticsServiceProvider).getDashboard(); }); typedef ReportQuery = ({ String startDate, String endDate, String? status, }); final reportProvider = FutureProvider.family((ref, params) async { return ref.read(analyticsServiceProvider).getReport( startDate: params.startDate, endDate: params.endDate, status: params.status, ); }); // ─── Vehicles ───────────────────────────────────────────────── typedef VehicleQuery = ({ int page, int pageSize, String? status, }); final vehiclesProvider = FutureProvider.family( (ref, params) async { return ref.read(vehicleServiceProvider).getVehicles( page: params.page, pageSize: params.pageSize, status: params.status, ); }, ); final vehicleDetailProvider = FutureProvider.family((ref, id) { return ref.read(vehicleServiceProvider).getVehicle(id); }); final maintenanceProvider = FutureProvider.family, String>((ref, vehicleId) { return ref.read(vehicleServiceProvider).getMaintenance(vehicleId); }); typedef CalendarKey = ({String vehicleId, int year, int month}); final calendarProvider = FutureProvider.family, CalendarKey>((ref, key) { return ref.read(vehicleServiceProvider) .getCalendar(key.vehicleId, key.year, key.month); }); // ─── Reservations ───────────────────────────────────────────── typedef ReservationQuery = ({ int page, int pageSize, String? status, String? source, String? search, String? customerId, }); final reservationsProvider = FutureProvider.family( (ref, params) async { return ref.read(reservationServiceProvider).getReservations( page: params.page, pageSize: params.pageSize, status: params.status, source: params.source, search: params.search, customerId: params.customerId, ); }, ); final reservationDetailProvider = FutureProvider.family((ref, id) { return ref.read(reservationServiceProvider).getReservation(id); }); final inspectionsProvider = FutureProvider.family, String>((ref, id) { return ref.read(reservationServiceProvider).getInspections(id); }); // ─── Customers ──────────────────────────────────────────────── typedef CustomerQuery = ({ int page, int pageSize, String? search, }); final customersProvider = FutureProvider.family( (ref, params) async { return ref.read(customerServiceProvider).getCustomers( page: params.page, pageSize: params.pageSize, search: params.search, ); }, ); final customerDetailProvider = FutureProvider.family((ref, id) { return ref.read(customerServiceProvider).getCustomer(id); }); // ─── Notifications ──────────────────────────────────────────── final notificationsProvider = FutureProvider>((ref) async { return ref.read(notificationServiceProvider).getNotifications(); }); final unreadCountProvider = FutureProvider((ref) async { return ref.read(notificationServiceProvider).getUnreadCount(); }); // ─── Offers ─────────────────────────────────────────────────── final offersProvider = FutureProvider>((ref) async { return ref.read(offerServiceProvider).getOffers(); }); final offerDetailProvider = FutureProvider.family((ref, id) { return ref.read(offerServiceProvider).getOffer(id); }); // ─── Settings ───────────────────────────────────────────────── final brandSettingsProvider = FutureProvider((ref) async { return ref.read(settingsServiceProvider).getBrand(); }); // ─── Payments ───────────────────────────────────────────────── final paymentServiceProvider = Provider((_) => PaymentService()); final reservationPaymentsProvider = FutureProvider.family, String>((ref, reservationId) { return ref.read(paymentServiceProvider).getPayments(reservationId); }); // ─── Team ───────────────────────────────────────────────────── final teamServiceProvider = Provider((_) => TeamService()); final teamProvider = FutureProvider>((ref) { return ref.read(teamServiceProvider).getMembers(); }); // ─── Contracts ──────────────────────────────────────────────── final contractServiceProvider = Provider((_) => ContractService()); final contractProvider = FutureProvider.family((ref, reservationId) { return ref.read(contractServiceProvider).getContract(reservationId); });