using Lada.Framework.Data.Domains.BaseEntities;
using Lada.Framework.Data.Domains.Identity;
using Lada.Framework.Data.Enums;
using System.ComponentModel.DataAnnotations;

namespace Lada.Framework.Data.Domains.Finance.Wallets
{
    public class Wallet : BaseEntityWithKey<int>
    {
        public int UserId { get; set; }    // IdentityUserId (nhân viên/khách hàng) hoặc mã chi nhánh
        public WalletType WalletType { get; set; } // "Employee", "Branch", hoặc "Customer"

        /// <summary>
        /// Giao dịch mà Wallet này là ví nguồn
        /// </summary>
        public virtual ICollection<Transaction> Transactions { get; set; }


        /// <summary>
        /// Giao dịch mà Wallet này là ví đích (nộp tiền/chuyển tiền tới ví này)
        /// </summary>
        public ICollection<Transaction> RelatedTransactions { get; set; }

        /// <summary>
        /// Chủ sở hữu
        /// </summary>
        public virtual User User { get; set; }

        ///// <summary>
        ///// Mã ví
        ///// </summary>
        //[MaxLength(64)]
        //public string Code { get; set; }

        /// <summary>
        /// Số dư hiện tại
        /// </summary>
        public decimal Balance { get; set; }

        public WalletStatus WalletStatus { get; set; }

        /// <summary>
        /// Concurrency token để đảm bảo toàn vẹn khi cập nhật số dư
        /// </summary>
        [Timestamp]
        public byte[]? RowVersion { get; set; }

    }
}
