using Lada.Framework.Data.Domains.BaseEntities;
using Lada.Framework.Data.Domains.Finance.Wallets;
using Lada.Framework.Data.Domains.Orders;
using Lada.Framework.Data.Enums;

namespace Lada.Framework.Data.Domains.Finance
{
    public class Expense : BaseEntityWithKey<Guid>
    {
        /// <summary>
        /// Mô tả chi phí
        /// </summary>
        public string Description { get; set; } = string.Empty;

        /// <summary>
        /// Ghi chú cho chi phí
        /// </summary>
        public string Note { get; set; } = string.Empty;

        /// <summary>
        /// Số tiền chi phí
        /// </summary>
        public decimal Amount { get; set; }

        /// <summary>
        /// Danh mục chi phí
        /// </summary>
        public int ExpenseCategoryId { get; set; }
        public virtual ExpenseCategory ExpenseCategory { get; set; }

        /// <summary>
        /// Trạng thái chi phí
        /// </summary>
        public ExpenseStatus Status { get; set; }

        /// <summary>
        /// ID của giao dịch liên kết (nếu có)
        /// </summary>
        public Guid? TransactionId { get; set; }
        public virtual Transaction Transaction { get; set; }

        /// <summary>
        /// ID của đơn hàng liên kết (nếu có)
        /// </summary>
        public int? OrderId { get; set; }
        public virtual Order Order { get; set; }

        /// <summary>
        /// UserId của người duyệt
        /// </summary>
        public int? ApprovedBy { get; set; }

        /// <summary>
        /// Lý do từ chối (nếu có)
        /// </summary>
        public string? RejectReason { get; set; }

        /// <summary>
        /// ID tài khoản ngân hàng nhận tiền (chỉ để reference)
        /// </summary>
        public int? UserBankAccountId { get; set; }
        public virtual UserBankAccount UserBankAccount { get; set; }

        /// <summary>
        /// Số tài khoản ngân hàng (copy từ UserBankAccount khi tạo)
        /// </summary>
        public string? BankAccountNumber { get; set; }

        /// <summary>
        /// Tên chủ tài khoản (copy từ UserBankAccount khi tạo)
        /// </summary>
        public string? BankAccountHolderName { get; set; }

        /// <summary>
        /// Mã ngân hàng (copy từ Bank khi tạo)
        /// </summary>
        public string? BankCode { get; set; }

        /// <summary>
        /// Tên ngân hàng (copy từ Bank khi tạo)
        /// </summary>
        public string? BankName { get; set; }

        /// <summary>
        /// Tên chi nhánh ngân hàng (copy từ Bank khi tạo)
        /// </summary>
        public string? BankBranchName { get; set; }
    }
}