using System.Collections.Generic; using System.Linq; namespace DDD { public static class ItemViewModelFactory { public static List CreateRestaurantManagementInventoryItem() { var result = new List(); var recipeDataMap = DataManager.Instance.RecipeDataSo.GetDataList().ToDictionary(r => r.Id, r => r); var foodDataMap = DataManager.Instance.FoodDataSo.GetDataList().ToDictionary(f => f.Id, f => f); var drinkDataMap = DataManager.Instance.DrinkDataSo.GetDataList().ToDictionary(d => d.Id, d => d); var ingredientDataMap = DataManager.Instance.IngredientDataSo.GetDataList().ToDictionary(i => i.Id, i => i); foreach (var kvp in InventoryManager.Instance.InventoryItems) { var id = kvp.Key; var item = InventoryManager.Instance.GetItemDataByIdOrNull(id); if (item == null) continue; var model = new ItemViewModel { Id = item.Id, ItemType = item.ItemType, Count = item.ItemType switch { ItemType.Recipe => CalculateCraftableCount(item.Id), ItemType.Ingredient => InventoryManager.Instance.GetItemCount(id), _ => 0 } }; result.Add(model); } return result; } private static int CalculateCraftableCount(string recipeId) { if (!DataManager.Instance.RecipeDataSo.TryGetDataById(recipeId, out var recipe)) return 0; string recipeResult = recipe.RecipeResult; return recipe.RecipeType switch { RecipeType.FoodRecipe => DataManager.Instance.FoodDataSo.TryGetDataById(recipeResult, out var food) ? food.GetCraftableCount() : 0, RecipeType.DrinkRecipe => DataManager.Instance.DrinkDataSo.TryGetDataById(recipeResult, out var drink) ? drink.GetCraftableCount() : 0, _ => 0 }; } public static ItemViewModel CreateByRecipeId(string recipeId) { var recipeSo = DataManager.Instance.RecipeDataSo; if (!recipeSo.TryGetDataById(recipeId, out var recipe)) return null; var item = InventoryManager.Instance.GetItemDataByIdOrNull(recipeId); if (item == null) return null; var model = new ItemViewModel { Id = recipeId, ItemType = item.ItemType, }; return model; } } }