import 'package:flutter/foundation.dart'; import 'package:sentry_flutter/sentry_flutter.dart'; import '../models/product.dart'; import '../services/product_service.dart'; class InventoryViewModel extends ChangeNotifier { final ProductService productService; InventoryViewModel({required this.productService}); List _products = []; List get products => _products; Future load() async { try { _products = await productService.getProducts(); notifyListeners(); } catch (e, stack) { debugPrint('InventoryViewModel: load error: $e'); Sentry.captureException(e, stackTrace: stack); rethrow; } } Future decreaseStock(String productId, int amount) async { try { await productService.decreaseStock(productId, amount); final index = _products.indexWhere((product) => product.id == productId); if (index != -1) { _products[index] = _products[index].copyWith( stockQuantity: _products[index].stockQuantity - amount, ); } notifyListeners(); } catch (e, stack) { if (e is InsufficientStockException) rethrow; debugPrint('InventoryViewModel: decreaseStock error: $e'); Sentry.captureException(e, stackTrace: stack); rethrow; } } Future increaseStock(String productId, int amount) async { try { await productService.increaseStock(productId, amount); final index = _products.indexWhere((product) => product.id == productId); if (index != -1) { _products[index] = _products[index].copyWith( stockQuantity: _products[index].stockQuantity + amount, ); } notifyListeners(); } catch (e, stack) { debugPrint('InventoryViewModel: increaseStock error: $e'); Sentry.captureException(e, stackTrace: stack); rethrow; } } void applyStockDelta(String productId, int delta) { if (delta == 0) return; final index = _products.indexWhere((product) => product.id == productId); if (index == -1) return; _products[index] = _products[index].copyWith( stockQuantity: _products[index].stockQuantity + delta, ); notifyListeners(); } }