using Lada.Framework.DTO;

namespace Ladaer.BackEnd.Infrastructures.DTO.Results.Finances
{
    public class WalletBalanceHistoryResult : BaseResult
    {
        /// <summary>
        /// ID ví
        /// </summary>
        public int WalletId { get; set; }

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

        /// <summary>
        /// Số dư ban đầu
        /// </summary>
        public decimal InitialBalance { get; set; }

        /// <summary>
        /// Số dư hiện tại
        /// </summary>
        public decimal CurrentBalance { get; set; }

        /// <summary>
        /// Số dư ban đầu hiển thị
        /// </summary>
        public string FormattedInitialBalance { get; set; } = string.Empty;

        /// <summary>
        /// Số dư hiện tại hiển thị
        /// </summary>
        public string FormattedCurrentBalance { get; set; } = string.Empty;

        /// <summary>
        /// Lịch sử số dư theo ngày
        /// </summary>
        public List<DailyBalanceHistory> DailyBalanceHistory { get; set; } = new List<DailyBalanceHistory>();

        /// <summary>
        /// Lịch sử số dư theo giao dịch
        /// </summary>
        public List<TransactionBalanceHistory> TransactionBalanceHistory { get; set; } = new List<TransactionBalanceHistory>();
    }

    public class DailyBalanceHistory
    {
        /// <summary>
        /// Ngày
        /// </summary>
        public DateTime Date { get; set; }

        /// <summary>
        /// Ngày hiển thị
        /// </summary>
        public string FormattedDate { get; set; } = string.Empty;

        /// <summary>
        /// Số dư đầu ngày
        /// </summary>
        public decimal StartOfDayBalance { get; set; }

        /// <summary>
        /// Số dư cuối ngày
        /// </summary>
        public decimal EndOfDayBalance { get; set; }

        /// <summary>
        /// Thay đổi số dư trong ngày
        /// </summary>
        public decimal DailyChange { get; set; }

        /// <summary>
        /// Số dư đầu ngày hiển thị
        /// </summary>
        public string FormattedStartBalance { get; set; } = string.Empty;

        /// <summary>
        /// Số dư cuối ngày hiển thị
        /// </summary>
        public string FormattedEndBalance { get; set; } = string.Empty;

        /// <summary>
        /// Thay đổi số dư hiển thị
        /// </summary>
        public string FormattedDailyChange { get; set; } = string.Empty;

        /// <summary>
        /// Màu sắc thay đổi
        /// </summary>
        public string ChangeColor { get; set; } = string.Empty;
    }

    public class TransactionBalanceHistory
    {
        /// <summary>
        /// ID giao dịch
        /// </summary>
        public Guid TransactionId { get; set; }

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

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

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

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

        /// <summary>
        /// Số tiền hiển thị
        /// </summary>
        public string FormattedAmount { get; set; } = string.Empty;

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

        /// <summary>
        /// Số dư hiển thị
        /// </summary>
        public string FormattedBalance { get; set; } = string.Empty;

        /// <summary>
        /// Thời gian giao dịch
        /// </summary>
        public DateTimeOffset TransactionDate { get; set; }

        /// <summary>
        /// Thời gian hiển thị
        /// </summary>
        public string FormattedTransactionDate { get; set; } = string.Empty;

        /// <summary>
        /// Màu sắc số tiền
        /// </summary>
        public string AmountColor { get; set; } = string.Empty;

        /// <summary>
        /// Icon giao dịch
        /// </summary>
        public string TransactionIcon { get; set; } = string.Empty;
    }
}
