import 'dart:convert';
import 'package:workouttest_util/model/exercise.dart';
import 'package:workouttest_util/service/api.dart';
import 'package:workouttest_util/util/logging.dart';

class ExerciseApi with Logging {
  final APIClient _client = APIClient();

  Future<void> saveExercise(Exercise exercise) async {
    String body = const JsonEncoder().convert(exercise.toJson());
    log(" ===== saving exercise id: ${exercise.exerciseId}:$body");
    await _client.post("exercises/${exercise.exerciseId}", body);
  }

  Future<List<Exercise>> getExercisesByCustomer(int customerId) async {
    final body = await _client.get("exercises/customer/", customerId.toString());
    final Iterable json = jsonDecode(body);
    final List<Exercise> exercises = json.map((exercise) {
      Exercise item = Exercise.fromJson(exercise);
      return item;
    }).toList();
    //exercises.sort( (a, b) => b.dateAdd.compareTo(a.dateAdd) );

    return exercises;
  }

  Future<Exercise> addExercise(Exercise exercise) async {
    String body = const JsonEncoder().convert(exercise.toJson());
    log(" ===== add new exercise: $body");
    final String response = await _client.post("exercises", body);
    final Exercise savedExercise = Exercise.fromJson(jsonDecode(response));
    return savedExercise;
  }

  Future<void> deleteExercise(Exercise exercise) async {
    if (exercise.exerciseId == null) {
      return;
    }
    int exerciseId = exercise.exerciseId!;
    log(" ===== delete exercise: $exerciseId");
    await _client.post("exercises/$exerciseId", "");
    return;
  }
}