import 'package:dartz/dartz.dart'; import '../entities/tour.dart'; import '../entities/logistic_object.dart'; import '../entities/location.dart'; import '../entities/counter.dart'; import '../../core/errors/failures.dart'; abstract class TourRepository { // Touren Future>> getTours(); Future> getTourById(int tourId); Future> updateTourState(int tourId, int state); Future> completeTour(int tourId); // Sync Future> syncData(); Future> checkForUpdates(); // Objects Future>> getObjectsByTour(int tourId); Future>> getObjectsByState(String state); Future> getObjectByBarcode(String barcode); Future> updateObjectState( int objectId, String newState, { int? locationId, int? refType, int? refId, String? containerCode, }); Future> createObject({ required int type, required String code, bool isManual = true, }); // Locations Future>> getLocations(); Future> getLocationById(int locationId); // Metadata Future>> getObjectMetadata(); // Statistics Future> getTourStatistics(int tourId); Future> getObjectStatistics(); // Counter operations (spezifisch für Lua-kompatible Ansichten) Future> getCounterOverview( int tourId, String tourType, { String? pageId, }); Future>> getPickupCounts(int tourId, String pageId); Future>> getSwapCounts(int tourId, String pageId); // Container operations Future>> getOpenContainers(); Future> addObjectToContainer( String containerId, String containerType, int objectId, ); Future> closeContainer( String containerId, String containerType, ); // Recent scans Future>> getRecentScans( int tourId, { int limit = 10, }); } class TourStatistics { final int totalObjects; final int completedObjects; final int pendingObjects; final Map objectsByState; final Map objectsByType; final double completionPercentage; const TourStatistics({ required this.totalObjects, required this.completedObjects, required this.pendingObjects, required this.objectsByState, required this.objectsByType, required this.completionPercentage, }); } class ObjectStatistics { final Map byState; final Map byType; final Map byLocation; final List recentObjects; final int totalCount; const ObjectStatistics({ required this.byState, required this.byType, required this.byLocation, required this.recentObjects, required this.totalCount, }); }