savePalma method

Future<void> savePalma(
  1. Map<String, dynamic> palmaData,
  2. BuildContext context
)

Guarda palma en local y trata de enviarla a la API. Si no puede, queda en "pending_palmas".

Implementation

Future<void> savePalma(
    Map<String, dynamic> palmaData, BuildContext context) async {
  try {
    // Insertar localmente en 'palmas' (tabla principal si existe) o como parte de lote
    // (aquí asumimos que el insert en la tabla principal ya ocurrió antes de llamar a este método).
    // Si deseas guardar primero en la base de palmas local, podrías hacer:
    // await _dbHelper.insertPalma(palmaData);

    bool success = await _sendToApi(palmaData);

    if (!success) {
      // Si falla la API o no hay token, almacenar en pendientes
      await _dbHelper.insertPendingPalma(jsonEncode(palmaData));
      await _sendNotification(
          'Sincronización Fallida', 'Guardado local, se sincronizará luego');
      _showMessage(context,
          'Guardado localmente. Se sincronizará cuando haya internet.');
    } else {
      await _sendNotification(
          'Guardado Exitoso', 'Palma sincronizada con la API');
      _showMessage(context, 'Palma guardada exitosamente en la API');
    }
  } catch (e) {
    // En caso de error inesperado, guardar en pendientes
    await _dbHelper.insertPendingPalma(jsonEncode(palmaData));
    await _sendNotification('Error', 'Ocurrió un error: $e');
    _showMessage(context,
        'Error al guardar palma. Guardada localmente para reintentar.');
  }
}