saveMetodoMuestreo method

Future<void> saveMetodoMuestreo(
  1. Map<String, dynamic> data,
  2. BuildContext context
)
  1. Intentar subir a API primero; si falla, guardar local y en pendientes. Si sube correctamente, guardar solo local.

Implementation

Future<void> saveMetodoMuestreo(
  Map<String, dynamic> data,
  BuildContext context,
) async {
  final now = DateTime.now().toIso8601String();
  final isUpdate = data.containsKey('id') && data['id'].toString().isNotEmpty;

  // Si es nueva, le asignamos ID generado y created
  if (!isUpdate) {
    data['id'] = _generateId();
    data['created'] = now;
  }
  data['updated'] = now;

  // 2.a) Intento subir a la API primero (POST o PUT según corresponda)
  final apiSuccess = await upload(data);

  if (apiSuccess) {
    // 2.b) API OK → guardo en tabla local sin marcar pendiente
    try {
      await _dbHelper.insertMetodoMuestreoEspecieBatch([data]);
      debugPrint('✅ Muestreo guardado LOCALMENTE con ID=${data['id']}');
      await _sendNotification('Muestreo sincronizado', 'Guardado en API');
      _showMessage(context, 'Sincronizado con éxito');
    } catch (e) {
      debugPrint('❌ Error guardando local Muestreo: $e');
      await _sendNotification('Error Local Muestreo', e.toString());
      _showMessage(context, 'Error al guardar localmente');
    }
  } else {
    // 2.c) API falló → guardo local y en pendientes
    try {
      await _dbHelper.insertMetodoMuestreoEspecieBatch([data]);
      debugPrint('💾 Muestreo guardado LOCALMENTE con ID=${data['id']}');
    } catch (e) {
      debugPrint('❌ Error guardando local Muestreo (fallback): $e');
      await _sendNotification('Error Local Muestreo', e.toString());
    }
    await _storePending(data);
    _showMessage(context, 'Guardado offline hasta conexión');
  }
}