saveIndividuo method

Future<void> saveIndividuo(
  1. Map<String, dynamic> individuo,
  2. BuildContext context
)

Guarda un nuevo individuo localmente y trata de enviarlo a la API.

Implementation

Future<void> saveIndividuo(
    Map<String, dynamic> individuo, BuildContext context) async {
  try {
    // 1) Insertar local en 'individuos'
    await _dbHelper.insertIndividuo(individuo);

    // 2) Intentar enviar a la API
    bool enviado = await _saveToApi(individuo);

    if (!enviado) {
      // 3a) Si falla, guardar pendiente y notificar
      await _dbHelper.insertPendingNewIndividuo(jsonEncode(individuo));
      await _sendNotification(
        'Sincronización Fallida',
        'Individuo guardado local, se sincronizará luego.',
      );
      _showSnack(context,
          'Guardado localmente. Se sincronizará cuando haya internet.');
    } else {
      // 3b) Si éxito, notificar y ya
      final String idValue = individuo['id']?.toString() ?? '(sin id)';
      await _sendNotification(
        'Guardado Exitoso',
        'Individuo con ID=$idValue sincronizado.',
      );
      _showSnack(context, 'Individuo creado exitosamente en la API.');
    }
  } catch (e) {
    // Error en inserción local u otros
    print('Error al guardar individuo: $e');
    await _sendNotification('Error', 'Ocurrió un error al guardar: $e');
    _showSnack(context, 'Error al guardar individuo: $e');
  }
}