$schema->string() ->description('Short French meal title.') ->required(), 'caption' => $schema->string() ->description('One concise French sentence describing the meal.') ->required(), 'type' => $schema->string() ->enum(MealPostType::class) ->description('Best matching meal type.') ->required(), 'calories' => $schema->integer() ->min(0) ->description('Estimated calories for the whole serving.') ->required(), 'proteins' => $schema->number() ->min(0) ->description('Estimated proteins in grams.') ->required(), 'carbs' => $schema->number() ->min(0) ->description('Estimated carbohydrates in grams.') ->required(), 'fats' => $schema->number() ->min(0) ->description('Estimated fats in grams.') ->required(), 'ingredients' => $schema->array() ->items($schema->object([ 'position' => $schema->integer()->min(1)->required(), 'ingredient' => $schema->string()->required(), 'quantity' => $schema->integer()->min(1)->required(), 'unit' => $schema->string()->enum(IngredientUnit::class)->required(), ])) ->description('Ingredients ordered by importance.') ->required(), 'image_prompt' => $schema->string() ->description('English photorealistic image generation prompt for the exact meal.') ->required(), ]; } }