using Lada.Framework.DTO;
using Ladaer.BackEnd.Infrastructures.DTO.Items.Finances;

namespace Ladaer.BackEnd.Infrastructures.DTO.Results.Finances
{
    public class TransactionResult : BaseResult
    {
        /// <summary>
        /// Thông tin giao dịch đã tạo/cập nhật
        /// </summary>
        public TransactionItem? Transaction { get; set; }
    }

    public class TransactionDetailResult : BaseResult
    {
        /// <summary>
        /// Chi tiết giao dịch
        /// </summary>
        public TransactionItem? Transaction { get; set; }

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

        /// <summary>
        /// Thông tin ví nguồn
        /// </summary>
        public WalletInfo? SourceWallet { get; set; }

        /// <summary>
        /// Thông tin ví đích (nếu có)
        /// </summary>
        public WalletInfo? DestinationWallet { get; set; }
    }

    public class TransactionStatisticsResult : BaseResult
    {
        /// <summary>
        /// Tổng số giao dịch
        /// </summary>
        public int TotalTransactions { get; set; }

        /// <summary>
        /// Tổng tiền thu vào
        /// </summary>
        public decimal TotalIncome { get; set; }

        /// <summary>
        /// Tổng tiền chi ra
        /// </summary>
        public decimal TotalOutcome { get; set; }

        /// <summary>
        /// Tổng tiền mặt
        /// </summary>
        public decimal TotalCash { get; set; }

        /// <summary>
        /// Tổng tiền chuyển khoản
        /// </summary>
        public decimal TotalTransfer { get; set; }

        /// <summary>
        /// Tổng tiền COD
        /// </summary>
        public decimal TotalCod { get; set; }

        /// <summary>
        /// Tổng cước nguồn
        /// </summary>
        public decimal TotalSourceFee { get; set; }

        /// <summary>
        /// Tổng cước đích
        /// </summary>
        public decimal TotalDestFee { get; set; }

        /// <summary>
        /// Thống kê theo loại giao dịch
        /// </summary>
        public List<TransactionTypeStatistic> TypeStatistics { get; set; } = new List<TransactionTypeStatistic>();

        /// <summary>
        /// Thống kê theo ngày
        /// </summary>
        public List<DailyTransactionStatistic> DailyStatistics { get; set; } = new List<DailyTransactionStatistic>();
    }

    public class WalletInfo
    {
        /// <summary>
        /// ID ví
        /// </summary>
        public int Id { get; set; }

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

        /// <summary>
        /// Loại ví
        /// </summary>
        public string WalletType { get; set; } = string.Empty;

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

        /// <summary>
        /// Trạng thái ví
        /// </summary>
        public string Status { get; set; } = string.Empty;
    }

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

        /// <summary>
        /// Số lượng giao dịch
        /// </summary>
        public int Count { get; set; }

        /// <summary>
        /// Tổng tiền
        /// </summary>
        public decimal TotalAmount { get; set; }
    }

    public class DailyTransactionStatistic
    {
        /// <summary>
        /// Ngày
        /// </summary>
        public DateOnly Date { get; set; }

        /// <summary>
        /// Số giao dịch
        /// </summary>
        public int TransactionCount { get; set; }

        /// <summary>
        /// Tổng tiền thu vào
        /// </summary>
        public decimal TotalIncome { get; set; }

        /// <summary>
        /// Tổng tiền chi ra
        /// </summary>
        public decimal TotalOutcome { get; set; }

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