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
{
    /// <summary>
    /// Tài khoản ngân hàng
    /// </summary>
    public class BankAccount : BaseEntityWithKey<int>
    {
        /// <summary>
        /// Tên tài khoản ngân hàng
        /// </summary>
        [MaxLength(256)]
        public string AccountName { get; set; } = string.Empty;

        /// <summary>
        /// Số tài khoản
        /// </summary>
        [MaxLength(50)]
        public string AccountNumber { get; set; } = string.Empty;

        /// <summary>
        /// Người quản lý tài khoản (nullable)
        /// </summary>
        public int? ManagerUserId { get; set; }

        /// <summary>
        /// Ngày cập nhật số dư cuối cùng
        /// </summary>
        public DateTimeOffset? LastBalanceUpdate { get; set; }

        /// <summary>
        /// Ngày giao dịch cuối cùng
        /// </summary>
        public DateTimeOffset? LastTransactionDate { get; set; }

        /// <summary>
        /// ID thông tin ngân hàng
        /// </summary>
        public int? BankId { get; set; }

        #region Navigation Properties

        /// <summary>
        /// Thông tin ngân hàng
        /// </summary>
        public virtual Bank? Bank { get; set; }

        /// <summary>
        /// Người quản lý tài khoản
        /// </summary>
        public virtual User? ManagerUser { get; set; }

        /// <summary>
        /// Danh sách giao dịch
        /// </summary>
        public virtual ICollection<BankTransaction> BankTransactions { get; set; } = new List<BankTransaction>();

        /// <summary>
        /// Danh sách import sao kê
        /// </summary>
        public virtual ICollection<BankStatementImport> BankStatementImports { get; set; } = new List<BankStatementImport>();

        #endregion
    }
}
