import "package:flutter/material.dart";
import "../demo_identity.dart";

/// Représentation d'un matériel affiché dans le catalogue et son détail
/// à partir des réponses API.
class MaterielItem {
  const MaterielItem({
    required this.id,
    required this.nom,
    required this.categorie,
    required this.marque,
    required this.modele,
    required this.reference,
    required this.campus,
    required this.etatGeneral,
    required this.disponible,
    required this.accessoires,
    required this.icon,
  });

  /// Construit un MaterielItem depuis la réponse JSON du catalogue.
  /// Les champs non fournis par cet endpoint (accessoires, icône) sont complétés.
  factory MaterielItem.fromJson(Map<String, dynamic> json) {
    final categorie = (json["categorie"] as Map<String, dynamic>)["nom"] as String;
    final campus = json["campus"] as Map<String, dynamic>?;
    final accessoires = json["accessoires"] as List<dynamic>?;
    return MaterielItem(
      id: json["id"] as int,
      nom: json["nom"] as String,
      categorie: categorie,
      marque: json["marque"] as String,
      modele: json["modele"] as String,
      reference: json["reference"] as String,
      campus: campus == null
          ? DemoIdentity.campusTag
          : "${campus["nom"]} · ${campus["ville"]}",
      etatGeneral: json["etatGeneral"] as String,
      disponible: json["statut"] == "DISPONIBLE",
      accessoires: accessoires == null ? const <String>[] : accessoires.cast<String>(),
      icon: iconePourCategorie(categorie),
    );
  }

  final int id;
  final String nom;
  final String categorie;
  final String marque;
  final String modele;
  final String reference;
  final String campus;
  final String etatGeneral;
  final bool disponible;
  final List<String> accessoires;
  final IconData icon;
}

/// Déduit une icône à partir du nom de catégorie renvoyé par l'API.
IconData iconePourCategorie(String categorie) {
  switch (categorie) {
    case "Ordinateur portable":
      return Icons.laptop_mac;
    case "Vidéoprojecteur":
      return Icons.videocam_outlined;
    case "Tablette":
      return Icons.tablet_mac;
    case "Caméra":
      return Icons.photo_camera_outlined;
    case "Périphérique audio":
      return Icons.headphones;
    case "Câble / Adaptateur":
      return Icons.cable;
    default:
      return Icons.inventory_2_outlined;
  }
}
