class Movie { final int id; final String title; final String description; final String imageUrl; final String category; final String director; final String releaseDate; final bool isFeatured; final double rating; final String originalTitle; const Movie({ required this.id, required this.title, required this.description, required this.imageUrl, required this.category, required this.director, required this.releaseDate, this.isFeatured = false, this.rating = 0.0, this.originalTitle = '', }); factory Movie.fromJson(Map json) { return Movie( id: json['id'] ?? 0, title: json['title'] ?? 'Titre inconnu', description: json['overview'] ?? 'Description non disponible', imageUrl: json['poster_path'] != null ? 'https://image.tmdb.org/t/p/w500${json['poster_path']}' : '', category: _getCategoryFromGenreIds(json['genre_ids'] ?? []), director: 'Réalisateur inconnu', releaseDate: json['release_date'] ?? 'Date inconnue', rating: (json['vote_average'] ?? 0.0).toDouble(), originalTitle: json['original_title'] ?? '', ); } static String _getCategoryFromGenreIds(List genreIds) { if (genreIds.contains(28) || genreIds.contains(12)) return 'Action'; if (genreIds.contains(27)) return 'Horreur'; if (genreIds.contains(35)) return 'Comédie'; if (genreIds.contains(18)) return 'Drame'; if (genreIds.contains(37)) return 'Western'; return 'Autre'; } } class MovieCategory { final String name; final bool isSelected; const MovieCategory({ required this.name, this.isSelected = false, }); MovieCategory copyWith({bool? isSelected}) { return MovieCategory( name: name, isSelected: isSelected ?? this.isSelected, ); } }