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, Icon = DataManager.Instance.GetSprite(id), Count = item.ItemType switch { ItemType.Recipe => CalculateCraftableCount(item.Id), ItemType.Ingredient => InventoryManager.Instance.GetItemCount(id), _ => 0 } }; if (recipeDataMap.TryGetValue(item.Id, out var recipe)) { var itemKey = recipe.ItemKey; switch (recipe.RecipeType) { case RecipeType.FoodRecipe: if (foodDataMap.TryGetValue(itemKey, out var food)) { model.NameKey = food.NameKey; model.DescriptionKey = food.DescriptionKey; } break; case RecipeType.DrinkRecipe: if (drinkDataMap.TryGetValue(itemKey, out var drink)) { model.NameKey = drink.NameKey; model.DescriptionKey = drink.DescriptionKey; } break; } } else if (ingredientDataMap.TryGetValue(item.Id, out var ingredient)) { model.NameKey = ingredient.NameKey; model.DescriptionKey = ingredient.DescriptionKey; } result.Add(model); } return result; } private static int CalculateCraftableCount(string recipeId) { if (!DataManager.Instance.RecipeDataSo.TryGetDataById(recipeId, out var recipe)) return 0; string itemKey = recipe.ItemKey; return recipe.RecipeType switch { RecipeType.FoodRecipe => DataManager.Instance.FoodDataSo.TryGetDataById(itemKey, out var food) ? food.GetCraftableCount() : 0, RecipeType.DrinkRecipe => DataManager.Instance.DrinkDataSo.TryGetDataById(itemKey, 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, Icon = DataManager.Instance.GetSprite(recipeId) }; switch (recipe.RecipeType) { case RecipeType.FoodRecipe: if (DataManager.Instance.FoodDataSo.TryGetDataById(recipe.ItemKey, out var food)) { model.NameKey = food.NameKey; model.DescriptionKey = food.DescriptionKey; } break; case RecipeType.DrinkRecipe: if (DataManager.Instance.DrinkDataSo.TryGetDataById(recipe.ItemKey, out var drink)) { model.NameKey = drink.NameKey; model.DescriptionKey = drink.DescriptionKey; } break; } return model; } } }