using Bp.Sync.Domain.Entities.BaseEntities;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations.Schema;

namespace Bp.Sync.Domain.Entities.Finances
{
    public class BatchTransaction
    {
        public List<Transaction> BatchTransactionEntity = new List<Transaction>();
    }
    public class Transaction : BaseEntityByLong
    {
        /// <summary>
        /// Mã ví
        /// </summary>
        public long? WalletId { 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; }

        // <summary>
        /// Mô tả hành động giao dịch
        /// </summary>
        public CurrencyType? CurrencyType { get; set; }

        /// <summary>
        /// Phương thức thanh toán
        /// </summary>
        public PaymentMethod PaymentMethod { get; set; }

        /// <summary>
        /// Trạng thái giao dịch
        /// </summary>
        public TransactionStatus TransactionStatus { get; set; }

        /// <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; }

    }

    public enum TransactionType
    {
        [Description("Trừ tiền")]
        SubMoney = 1,
        [Description("Cộng tiền")]
        AddMoney = 2
    }

    public enum CurrencyType
    {
        [Description("Tiền nạp tài khoản")]
        PayIn = 1,
    }

    public enum TransactionStatus
    {
        [Description("Chờ duyệt")]
        Pending = 1,
        [Description("Hoàn thành")]
        Completed = 2,
        [Description("Từ chối")]
        Reject = 3,
        [Description("Hủy bỏ")]
        Cancel = 4
    }

    public enum PaymentMethod
    {
        [Description("Tiền mặt")]
        Cash = 1,
        [Description("Chuyển khoản")]
        Transfer = 2,
        [Description("Nạp online")]
        Online = 3,
        [Description("Thẻ điện thoại")]
        PhoneCard = 4,
        [Description("Ví điện tử")]
        Wallet = 5
    }
}
