using Lada.Framework.Data.Enums;
using Lada.Framework.DTO;

namespace Ladaer.BackEnd.Infrastructures.DTO.Items.Finances
{
    public class TransactionItem : BaseItem<Guid>
    {
        /// <summary>
        /// ID giao dịch
        /// </summary>
        public Guid Id { get; set; }

        /// <summary>
        /// Mô tả giao dịch
        /// </summary>
        public string Description { get; set; } = string.Empty;

        /// <summary>
        /// Ghi chú cho giao dịch
        /// </summary>
        public string Note { get; set; } = string.Empty;

        /// <summary>
        /// Số tiền giao dịch
        /// </summary>
        public decimal Amount { get; set; }

        /// <summary>
        /// Số tiền mặt
        /// </summary>
        public decimal CashAmount { get; set; }

        /// <summary>
        /// Số tiền chuyển khoản
        /// </summary>
        public decimal TransferAmount { get; set; }

        /// <summary>
        /// Loại giao dịch
        /// </summary>
        public TransactionType TransactionType { get; set; }

        /// <summary>
        /// Tên loại giao dịch
        /// </summary>
        public string TransactionTypeName { get; set; } = string.Empty;

        /// <summary>
        /// Hướng giao dịch
        /// </summary>
        public TransactionDirection TransactionDirection { get; set; }

        /// <summary>
        /// Tên hướng giao dịch
        /// </summary>
        public string TransactionDirectionName { get; set; } = string.Empty;

        /// <summary>
        /// Ngày giao dịch
        /// </summary>
        public DateTimeOffset TransactionDate { get; set; }

        /// <summary>
        /// ID ví nguồn
        /// </summary>
        public int WalletId { get; set; }

        /// <summary>
        /// Tên chủ ví nguồn
        /// </summary>
        public string WalletOwnerName { get; set; } = string.Empty;

        /// <summary>
        /// ID ví đích (nullable)
        /// </summary>
        public int? RelatedWalletId { get; set; }

        /// <summary>
        /// Tên chủ ví đích
        /// </summary>
        public string RelatedWalletOwnerName { get; set; } = string.Empty;

        /// <summary>
        /// Số lượng đơn hàng liên kết
        /// </summary>
        public int OrderCount { get; set; }

        /// <summary>
        /// Danh sách mã đơn hàng (để hiển thị preview)
        /// </summary>
        public List<string> OrderCodes { get; set; } = new List<string>();

        /// <summary>
        /// Tổng tiền COD từ các đơn hàng
        /// </summary>
        public decimal TotalCodAmount { get; set; }

        /// <summary>
        /// Tổng cước nguồn từ các đơn hàng
        /// </summary>
        public decimal TotalSourceFeeAmount { get; set; }

        /// <summary>
        /// Tổng cước đích từ các đơn hàng
        /// </summary>
        public decimal TotalDestFeeAmount { get; set; }

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

        /// <summary>
        /// Tên trạng thái giao dịch
        /// </summary>
        public string StatusName { get; set; } = string.Empty;

        /// <summary>
        /// Số tiền hiển thị với dấu (+/-) để phân biệt thu/chi
        /// </summary>
        public string FormattedAmount { get; set; } = string.Empty;

        /// <summary>
        /// Số tiền hiển thị với định dạng tiền tệ
        /// </summary>
        public string FormattedAmountWithCurrency { get; set; } = string.Empty;

        /// <summary>
        /// Màu sắc để hiển thị (xanh cho thu, đỏ cho chi)
        /// </summary>
        public string AmountColor { get; set; } = string.Empty;

        /// <summary>
        /// Icon để hiển thị loại giao dịch
        /// </summary>
        public string TransactionIcon { get; set; } = string.Empty;

        /// <summary>
        /// Tên người gửi/nhận tiền
        /// </summary>
        public string FromUserName { get; set; } = string.Empty;

        /// <summary>
        /// Số điện thoại người gửi/nhận tiền
        /// </summary>
        public string FromUserPhone { get; set; } = string.Empty;

        /// <summary>
        /// Tên đầy đủ người gửi/nhận tiền
        /// </summary>
        public string FromUserFullName { get; set; } = string.Empty;

        /// <summary>
        /// Số dư ví sau giao dịch
        /// </summary>
        public decimal BalanceAfterTransaction { get; set; }

        /// <summary>
        /// Số dư ví hiển thị với định dạng tiền tệ
        /// </summary>
        public string FormattedBalance { get; set; } = string.Empty;

        /// <summary>
        /// Có phải giao dịch thu tiền không
        /// </summary>
        public bool IsIncome { get; set; }

        /// <summary>
        /// Có phải giao dịch chi tiền không
        /// </summary>
        public bool IsOutcome { get; set; }

        /// <summary>
        /// Mô tả ngắn gọn cho giao dịch
        /// </summary>
        public string ShortDescription { get; set; } = string.Empty;
    }
}
