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

namespace Ladaer.BackEnd.Infrastructures.DTO.Models.Finances
{
    public class TransactionModel : BaseModel<Guid>
    {
        /// <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>
        /// Hướng giao dịch
        /// </summary>
        public TransactionDirection TransactionDirection { get; set; }

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

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

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

        /// <summary>
        /// Danh mục chi phí (nullable)
        /// </summary>
        public int? CostCategoryId { get; set; }

        /// <summary>
        /// Danh sách đơn hàng liên kết
        /// </summary>
        public List<TransactionOrderModel> Orders { get; set; } = new List<TransactionOrderModel>();
    }

    public class TransactionOrderModel
    {
        /// <summary>
        /// ID đơn hàng
        /// </summary>
        public int OrderId { get; set; }

        /// <summary>
        /// Số tiền COD
        /// </summary>
        public decimal CodAmount { get; set; }

        /// <summary>
        /// Cước nguồn
        /// </summary>
        public decimal SourceFeeAmount { get; set; }

        /// <summary>
        /// Cước đích
        /// </summary>
        public decimal DestFeeAmount { get; set; }
    }
}