import "../models/emprunt_response.dart";
import "../models/emprunt_item.dart";
import "api_client.dart";

/// Appels liés aux emprunts.
class EmpruntService {
  EmpruntService._();

  static const int posteEmpruntId = 1;

  static Future<EmpruntResponse> creerEmprunt({
    required int materielId,
    required String commentaireDepart,
    required List<Map<String, dynamic>> elements,
  }) async {
    final reponse = await ApiClient.post("/emprunts", {
      "materielId": materielId,
      "posteEmpruntId": posteEmpruntId,
      "modeIdentification": "MAIL_ENSUP",
      if (commentaireDepart.trim().isNotEmpty) "commentaireDepart": commentaireDepart.trim(),
      "elements": elements,
    });

    final data = (reponse as Map<String, dynamic>)["data"] as Map<String, dynamic>;
    return EmpruntResponse.fromJson(data);
  }

  static Future<List<EmpruntItem>> getMesEmprunts() async {
    final reponse = await ApiClient.get("/mes-emprunts");
    final data = (reponse as Map<String, dynamic>)["data"] as List<dynamic>;
    return data.map((json) => EmpruntItem.fromJson(json as Map<String, dynamic>)).toList();
  }

  static Future<EmpruntResponse> restituerEmprunt({
    required int empruntId,
    required String commentaireRetour,
    required List<Map<String, dynamic>> elements,
  }) async {
    final reponse = await ApiClient.post("/emprunts/$empruntId/restitution", {
      "modeIdentification": "MAIL_ENSUP",
      if (commentaireRetour.trim().isNotEmpty) "commentaireRetour": commentaireRetour.trim(),
      "elements": elements,
    });

    final data = (reponse as Map<String, dynamic>)["data"] as Map<String, dynamic>;
    return EmpruntResponse.fromJson(data);
  }
}
