upload method

Future<bool> upload(
  1. Map<String, dynamic> data
)
  1. Sube data a la API: si viene con 'id' hace PUT a /{id}, si no hace POST.

Implementation

Future<bool> upload(Map<String, dynamic> data) async {
  try {
    final prefs = await SharedPreferences.getInstance();
    final token = prefs.getString('token');
    if (token == null) {
      debugPrint('โŒ upload() โ†’ Token NULO. No se puede enviar al API.');
      return false;
    }

    final bool isUpdate =
        data.containsKey('id') && data['id'].toString().isNotEmpty;
    late Uri uri;
    late http.Response response;

    if (isUpdate) {
      final id = data['id'];
      uri = Uri.parse('$apiUrl/$id');
      debugPrint('๐Ÿ”ง Enviando a API โ†’ PUT $uri');
      debugPrint('๐Ÿ“จ Payload JSON โ†’ ${jsonEncode(data)}');

      response = await http.put(
        uri,
        headers: {
          'Content-Type': 'application/json',
          'Authorization': 'Bearer $token',
        },
        body: jsonEncode(data),
      );
    } else {
      uri = Uri.parse(apiUrl);
      debugPrint('๐Ÿ”ง Enviando a API โ†’ POST $uri');
      debugPrint('๐Ÿ“จ Payload JSON โ†’ ${jsonEncode(data)}');

      response = await http.post(
        uri,
        headers: {
          'Content-Type': 'application/json',
          'Authorization': 'Bearer $token',
        },
        body: jsonEncode(data),
      );
    }

    debugPrint('๐Ÿ” Respuesta API โ†’ status: ${response.statusCode}');
    debugPrint('๐Ÿ“ฆ Respuesta body โ†’ ${response.body}');

    if (response.statusCode == 200 || response.statusCode == 201) {
      debugPrint('โœ… Muestreo sincronizado OK en API');
      return true;
    } else {
      debugPrint(
          'โŒ API error: Cรณdigo ${response.statusCode}, body: ${response.body}');
      await _sendNotification(
          'Error API Muestreo', 'Cรณdigo: ${response.statusCode}');
      return false;
    }
  } catch (e) {
    debugPrint('โŒ Error upload Muestreo: $e');
    await _sendNotification('Error Upload Muestreo', e.toString());
    return false;
  }
}