import 'recipe_ingredient.dart';

class Recipe {
  final int id;
  final String title;
  final String? description;
  final String? imageUrl;
  final int? servings;
  final String? instructions;
  final List<RecipeIngredient> ingredients;

  const Recipe({
    required this.id,
    required this.title,
    this.description,
    this.imageUrl,
    this.servings,
    this.instructions,
    this.ingredients = const [],
  });

  factory Recipe.fromJson(Map<String, dynamic> json) {
    final dynamic rawId = json['id'];
    final dynamic rawTitle = json['title'] ?? json['name'];
    final dynamic rawDescription = json['description'];
    final dynamic rawImageUrl = json['imageUrl'];
    final dynamic rawServings = json['servings'];
    final rawIngredients = json['ingredients'] as List<dynamic>? ?? [];
    final normalizedImageUrl = rawImageUrl?.toString().trim();

    return Recipe(
      id: rawId is num ? rawId.toInt() : int.parse(rawId.toString()),
      title: (rawTitle ?? '').toString(),
      description: rawDescription == null ? null : rawDescription.toString(),
      imageUrl:
        (normalizedImageUrl == null || normalizedImageUrl.isEmpty)
          ? null
          : normalizedImageUrl,
      servings: rawServings == null
          ? null
          : (rawServings is num
              ? rawServings.toInt()
              : int.tryParse(rawServings.toString())),
      instructions: json['instructions'] as String?,
      ingredients: rawIngredients
          .map((i) => RecipeIngredient.fromJson(i as Map<String, dynamic>))
          .toList(),
    );
  }
}
