using Bp.Sync.Domain.Elastics.BaseEntities;
using Bp.Sync.Domain.Entities.Finances;
using CommonLibrary;
using System;

namespace Bp.Sync.Domain.Elastics.Finances
{
    public class TransactionElastic : ElasticBaseEntityWithKey<long>
    {
        public long? WalletId { get; set; }
        /// <summary>
        /// Id của thực thể trong ví
        /// ví dụ branchId, UserId, ...
        /// </summary>
        public long? WalletEntityId { get; set; }
        public string AccountNo { get; set; }

        /// <summary>
        /// Mã giao dịch
        /// </summary>
        public string Code { get; set; }

        /// <summary>
        /// Nội dung giao dịch
        /// </summary>
        public string Content { get; set; }

        /// <summary>
        /// Giá trị giao dịch
        /// </summary>
        public decimal? TransactionValue { get; set; }

        /// <summary>
        /// Số dư tính đến thời điểm hiện tại
        /// </summary>
        public decimal? Balance { get; set; } = 0;

        /// <summary>
        /// Số dư km
        /// </summary>
        public decimal? SubBalance { get; set; } = 0;

        /// <summary>
        /// Loại giao dịch
        /// </summary>
        public TransactionType TransactionType { get; set; }
        public string TransactionTypeName => TransactionType.GetDescription();

        // <summary>
        /// Mô tả hành động giao dịch
        /// </summary>
        public CurrencyType? CurrencyType { get; set; }
        public string CurrencyTypeName => CurrencyType.HasValue ? CurrencyType.Value.GetDescription() : null;

        /// <summary>
        /// Phương thức thanh toán
        /// </summary>
        public PaymentMethod PaymentMethod { get; set; }
        public string PaymentMethodName => PaymentMethod.GetDescription();

        /// <summary>
        /// Trạng thái giao dịch
        /// </summary>
        public TransactionStatus TransactionStatus { get; set; }
        public string TransactionStatusName => TransactionStatus.GetDescription();

        /// <summary>
        /// Thời gian hoàn thành giao dịch
        /// </summary>
        public DateTimeOffset? CompleteTime { get; set; }

        /// <summary>
        /// Ghi chú cập nhật
        /// </summary>
        public string UpdatedNote { get; set; }

        /// <summary>
        /// Mã đơn hàng
        /// </summary>
        public long? EntityId { get; set; }
        public string EntityCode { get; set; }

        /// <summary>
        ///danh sách người cần phê duyệt cách nhau dấu phẩy
        /// </summary>
        public string ApproveBy { get; set; }

        /// <summary>
        /// Tên ds người phê duyệt
        /// </summary>
        public string ApproveByUserName { get; set; }

        /// <summary>
        ///danh sách người đã phê duyệt cách nhau dấu phẩy
        /// </summary>
        public string ApprovedBy { get; set; }
        /// <summary>
        /// Tên ds người đã phê duyệt
        /// </summary>
        public string ApprovedByUserName { get; set; }

        /// <summary>
        /// Ghi chú duyệt
        /// </summary>
        public string ApprovedNote { get; set; }

        public DateTimeOffset? ApprovedTime { get; set; }
        /// <summary>
        /// Người phụ trách giao dịch
        /// </summary>
        public string PersonInChargeUsername { get; set; }
        public int? PersonInChargeId { get; set; }
    }
}
