using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using Aberwyn.Data; using Aberwyn.Models; namespace Aberwyn.Models { public class MenuViewModel { public List Meals { get; set; } // List of all available meals public List WeeklyMenus { get; set; } // List of weekly menu entries public int WeekNumber { get; set; } // Week number for the menu public int Year { get; set; } // Year for the menu } public class WeeklyMenuDto { public int Id { get; set; } public int DayOfWeek { get; set; } public int WeekNumber { get; set; } public int Year { get; set; } public int? BreakfastMealId { get; set; } public int? LunchMealId { get; set; } public int? DinnerMealId { get; set; } public string? BreakfastMealName { get; set; } public string? LunchMealName { get; set; } public string? DinnerMealName { get; set; } public byte[]? DinnerMealThumbnail { get; set; } } public class WeeklyMenu { public int Id { get; set; } public int DayOfWeek { get; set; } public int? BreakfastMealId { get; set; } public int? LunchMealId { get; set; } public int? DinnerMealId { get; set; } public string? Cook { get; set; } public int WeekNumber { get; set; } public int Year { get; set; } public DateTime CreatedAt { get; set; } [NotMapped] public byte[]? BreakfastThumbnail { get; set; } [NotMapped] public byte[]? LunchThumbnail { get; set; } [NotMapped] public byte[]? DinnerThumbnail { get; set; } [NotMapped] public string? BreakfastMealName { get; set; } [NotMapped] public string? LunchMealName { get; set; } [NotMapped] public string? DinnerMealName { get; set; } } public class RecentMenuEntry { public DateTime Date { get; set; } public string BreakfastMealName { get; set; } public string LunchMealName { get; set; } public string DinnerMealName { get; set; } } public class Meal { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id { get; set; } public string Name { get; set; } // Behåll som obligatorisk public string? Description { get; set; } public string? ProteinType { get; set; } public int? MealCategoryId { get; set; } [ForeignKey("MealCategoryId")] public MealCategory? Category { get; set; } public string? CarbType { get; set; } public string? RecipeUrl { get; set; } public string? ImageUrl { get; set; } public bool IsAvailable { get; set; } public DateTime CreatedAt { get; set; } public byte[]? ThumbnailData { get; set; } public byte[]? ImageData { get; set; } public string? ImageMimeType { get; set; } public string? Instructions { get; set; } public List Ingredients { get; set; } = new(); } public class Ingredient { public int Id { get; set; } public int MealId { get; set; } public string Quantity { get; set; } public string Item { get; set; } } public class MealDto { public int Id { get; set; } public string Name { get; set; } public string Category { get; set; } public bool IsAvailable { get; set; } public string? ImageUrl { get; set; } public string? ImageData { get; set; } // base64 public string? ImageMimeType { get; set; } public static MealListDto FromMeal(Meal meal, bool includeThumbnail = false) { return new MealListDto { Id = meal.Id, Name = meal.Name, Description = meal.Description, ThumbnailData = includeThumbnail && meal.ThumbnailData != null ? Convert.ToBase64String(meal.ThumbnailData) : null }; } } public class MealListDto { public int Id { get; set; } public string Name { get; set; } = ""; public string? Description { get; set; } public string? ThumbnailData { get; set; } public List Ingredients { get; set; } = new(); public static MealListDto FromMeal(Meal meal, bool includeThumbnail = false) { return new MealListDto { Id = meal.Id, Name = meal.Name, Description = meal.Description, ThumbnailData = includeThumbnail && meal.ThumbnailData != null ? Convert.ToBase64String(meal.ThumbnailData) : null, Ingredients = meal.Ingredients?.Select(i => new IngredientDto { Item = i.Item }).ToList() ?? new List() }; } public class IngredientDto { public string Item { get; set; } = ""; } } public class MealCategory { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id { get; set; } [Required] public string Name { get; set; } public string? Slug { get; set; } public string? Description { get; set; } public string? Icon { get; set; } public string? Color { get; set; } public bool IsActive { get; set; } = true; public int DisplayOrder { get; set; } = 0; [NotMapped] // krävs om du inte har kolumnen i databasen public int MealCount { get; set; } public List Meals { get; set; } = new(); } }