import 'package:conalep_pos/models/mesa_model.dart'; import 'package:flutter/material.dart'; import '../services/services.dart'; import 'package:sqflite/sqflite.dart'; class MesaViewModel extends ChangeNotifier { String _busqueda = ""; String get busqueda => _busqueda; List _mesas = []; bool _isLoading = false; Mesa? _selectedMesa; List get mesas => _mesas; bool get isLoading => _isLoading; Mesa? get selectedMesa => _selectedMesa; int _currentPage = 1; int _totalMesas = 0; int _limit = 10; int get currentPage => _currentPage; int get totalMesas => _totalMesas; int get totalPages => (_totalMesas / _limit).ceil(); setBusqueda(String value) { _busqueda = value; notifyListeners(); } void selectMesa(Mesa mesa) { _selectedMesa = mesa; notifyListeners(); } Future fetchLocalAll({int page = 1}) async { _currentPage = page; var db = await RepoService().db; int? count = Sqflite.firstIntValue(await db!.rawQuery('SELECT COUNT(*) FROM Mesa')); _totalMesas = count ?? 0; int offset = (_limit * (page - 1)); var query = await db.query('Mesa', orderBy: 'id asc', limit: _limit, offset: offset); _mesas = query.map((element) => Mesa.fromJson(element)).toList(); notifyListeners(); } Future fetchLocalByName({required String nombre}) async { var db = await RepoService().db; var query = await db!.query( 'Mesa', where: 'nombre LIKE "%$nombre%"', orderBy: 'id asc', ); List aux = []; for (var element in query) { Mesa mesa = Mesa.fromJson(element); aux.add(mesa); } _mesas = aux; notifyListeners(); } Mesa fetchLocalById({required int? idMesa}) { final mesa = mesas.firstWhere((mesa) => mesa.id == idMesa, orElse: () => Mesa(id: 0, nombre: 'Mesa desconocida')); return mesa; } Future addMesa(Mesa mesa) async { await RepoService().guardar(mesa); fetchLocalAll(); } Future updateMesa(Mesa mesa) async { setIsLoading(true); try { await RepoService().guardar(mesa); fetchLocalAll(); } catch (e) { print('Error updating mesa: $e'); } setIsLoading(false); } Future deleteMesa(int id) async { await RepoService().eliminar(id); fetchLocalAll(); } void setIsLoading(bool loading) { _isLoading = loading; notifyListeners(); } void nextPage() { if (_currentPage < totalPages) { fetchLocalAll(page: _currentPage + 1); } } void previousPage() { if (_currentPage > 1) { fetchLocalAll(page: _currentPage - 1); } } Future isMesaActive(String clave) async { var db = await RepoService().db; var result = await db!.query( 'Mesa', where: 'clave = ?', whereArgs: [clave], ); if (result.isNotEmpty) { var mesa = Mesa.fromJson(result.first); return mesa.activa == true; } return false; } }