import "materiel_item.dart";

/// Un emprunt en cours de l'étudiant, affiché dans le parcours de restitution
/// et renvoyé par l'API.
class EmpruntItem {
  const EmpruntItem({
    required this.id,
    required this.materiel,
    required this.dateEmprunt,
    required this.retourPrevu,
    required this.statut,
  });

  factory EmpruntItem.fromJson(Map<String, dynamic> json) {
    final dateEmprunt = DateTime.parse(json["dateEmprunt"] as String);
    final retourPrevu = DateTime.parse(json["dateRetourPrevue"] as String);

    return EmpruntItem(
      id: json["id"] as int,
      materiel: MaterielItem.fromJson(json["materiel"] as Map<String, dynamic>),
      dateEmprunt: _dateHeure(dateEmprunt),
      retourPrevu: _date(retourPrevu),
      statut: json["statut"] as String,
    );
  }

  final int id;
  final MaterielItem materiel;
  final String dateEmprunt;
  final String retourPrevu;
  final String statut;

  EmpruntItem copyWith({MaterielItem? materiel, String? statut}) {
    return EmpruntItem(
      id: id,
      materiel: materiel ?? this.materiel,
      dateEmprunt: dateEmprunt,
      retourPrevu: retourPrevu,
      statut: statut ?? this.statut,
    );
  }

  static String _deux(int valeur) => valeur.toString().padLeft(2, "0");

  static String _date(DateTime date) {
    return "${_deux(date.day)}/${_deux(date.month)}";
  }

  static String _dateHeure(DateTime date) {
    return "${_date(date)} à ${_deux(date.hour)}:${_deux(date.minute)}";
  }
}
