using CMSMicroservice.Domain.Common;
using CMSMicroservice.Domain.Enums;

namespace CMSMicroservice.Domain.Entities;

/// <summary>
/// حرکات انبار (تاریخچه تغییرات موجودی)
/// </summary>
public class StockMovement : BaseAuditableEntity
{
    // ========== ارتباط با InventoryItem ==========
    
    /// <summary>
    /// شناسه آیتم انبار
    /// </summary>
    public long InventoryItemId { get; set; }
    
    /// <summary>
    /// آیتم انبار
    /// </summary>
    public InventoryItem InventoryItem { get; set; } = null!;
    
    // ========== نوع حرکت ==========
    
    /// <summary>
    /// نوع حرکت انبار
    /// </summary>
    public StockMovementType MovementType { get; set; }
    
    // ========== مقادیر ==========
    
    /// <summary>
    /// مقدار تغییر (مثبت برای ورود، منفی برای خروج)
    /// </summary>
    public int Quantity { get; set; }
    
    /// <summary>
    /// موجودی قبل از این حرکت
    /// </summary>
    public int QuantityBefore { get; set; }
    
    /// <summary>
    /// موجودی بعد از این حرکت
    /// </summary>
    public int QuantityAfter { get; set; }
    
    // ========== مراجع ==========
    
    /// <summary>
    /// شناسه سفارش (برای فروش/برگشت در فروشگاه معمولی)
    /// </summary>
    public long? OrderId { get; set; }
    
    /// <summary>
    /// شناسه سفارش تخفیفی (برای فروش/برگشت در فروشگاه تخفیفی)
    /// </summary>
    public long? DiscountOrderId { get; set; }
    
    /// <summary>
    /// شماره مرجع (مثل شماره فاکتور ورود کالا)
    /// </summary>
    public string? ReferenceNumber { get; set; }
    
    // ========== توضیحات ==========
    
    /// <summary>
    /// یادداشت و توضیحات اضافی
    /// </summary>
    public string? Note { get; set; }
    
    // ========== کاربر ==========
    
    /// <summary>
    /// شناسه کاربری که این عملیات را انجام داده
    /// </summary>
    public long? PerformedByUserId { get; set; }
}