using FnbEngine.Domain.SeedWork;

namespace FnbEngine.Domain.AggregatesModel.RecipeAggregate;

// EN: Recipe ingredient entity — links to an optional inventory item for COGS calculation.
// VI: Entity nguyên liệu công thức — liên kết với mặt hàng tồn kho (tùy chọn) để tính giá vốn.
public class RecipeIngredient : Entity
{
    private Guid _recipeId;
    private string _ingredientName = null!;
    private decimal _quantity;
    private string _unit = null!;
    private decimal _costPerUnit;
    private Guid? _inventoryItemId;
    private decimal _quantityPerServing;

    public Guid RecipeId => _recipeId;
    public string IngredientName => _ingredientName;
    public decimal Quantity => _quantity;
    public string Unit => _unit;
    public decimal CostPerUnit => _costPerUnit;
    // EN: Optional link to inventory item for auto-deduction and COGS tracking.
    // VI: Liên kết tùy chọn đến mặt hàng tồn kho để trừ kho tự động và theo dõi giá vốn.
    public Guid? InventoryItemId => _inventoryItemId;
    // EN: Quantity consumed per serving (for COGS calculation).
    // VI: Số lượng tiêu thụ mỗi phần (để tính giá vốn).
    public decimal QuantityPerServing => _quantityPerServing;

    protected RecipeIngredient() { }

    public RecipeIngredient(Guid recipeId, string ingredientName, decimal quantity, string unit,
        decimal costPerUnit, Guid? inventoryItemId = null, decimal quantityPerServing = 0)
    {
        Id = Guid.NewGuid();
        _recipeId = recipeId;
        _ingredientName = ingredientName;
        _quantity = quantity;
        _unit = unit;
        _costPerUnit = costPerUnit;
        _inventoryItemId = inventoryItemId;
        _quantityPerServing = quantityPerServing;
    }
}
