using Lada.Framework.DTO;

namespace Ladaer.BackEnd.Infrastructures.DTO.Results.Finance
{
    /// <summary>
    /// Model cho từng dòng trong báo cáo thu chi
    /// </summary>
    public class IncomeExpenseReportRowItem
    {
        /// <summary>
        /// Tên danh mục
        /// </summary>
        public string CategoryName { get; set; } = string.Empty;

        /// <summary>
        /// ID danh mục (nếu có)
        /// </summary>
        public int? CategoryId { get; set; }

        /// <summary>
        /// ID danh mục cha (nếu có)
        /// </summary>
        public int? ParentId { get; set; }

        /// <summary>
        /// Cấp độ trong cây (0: gốc, 1: con, 2: cháu...)
        /// </summary>
        public int Level { get; set; }

        /// <summary>
        /// Loại dòng: "Income", "Expense", "Total"
        /// </summary>
        public string RowType { get; set; } = string.Empty;

        /// <summary>
        /// Số tiền theo từng ngày (Key: "yyyy-MM-dd", Value: số tiền)
        /// </summary>
        public Dictionary<string, decimal> DailyAmounts { get; set; } = new Dictionary<string, decimal>();

        /// <summary>
        /// Tổng cộng
        /// </summary>
        public decimal Total { get; set; }
    }

    /// <summary>
    /// Kết quả báo cáo thu chi
    /// </summary>
    public class IncomeExpenseReportResult : BaseResult
    {
        /// <summary>
        /// Ngày bắt đầu
        /// </summary>
        public DateTimeOffset FromDate { get; set; }

        /// <summary>
        /// Ngày kết thúc
        /// </summary>
        public DateTimeOffset ToDate { get; set; }

        /// <summary>
        /// Danh sách các cột ngày ["2025-10-01", "2025-10-02", ...]
        /// </summary>
        public List<string> DateColumns { get; set; } = new List<string>();

        /// <summary>
        /// Danh sách các dòng dữ liệu
        /// </summary>
        public List<IncomeExpenseReportRowItem> Rows { get; set; } = new List<IncomeExpenseReportRowItem>();

        /// <summary>
        /// Tổng thu
        /// </summary>
        public decimal TotalIncome { get; set; }

        /// <summary>
        /// Tổng chi
        /// </summary>
        public decimal TotalExpense { get; set; }

        /// <summary>
        /// Chênh lệch (Thu - Chi)
        /// </summary>
        public decimal NetAmount { get; set; }
    }

    /// <summary>
    /// Model nhận dữ liệu từ stored procedure
    /// </summary>
    public class TransactionReportRow
    {
        /// <summary>
        /// Ngày giao dịch
        /// </summary>
        public DateTime ReportDate { get; set; }

        /// <summary>
        /// Loại giao dịch (3=OrderFee, 4=CollectFromDriver, ...)
        /// </summary>
        public int TransactionType { get; set; }

        /// <summary>
        /// Hướng giao dịch: "Income" hoặc "Outcome"
        /// </summary>
        public string TransactionDirection { get; set; } = string.Empty;

        /// <summary>
        /// ID danh mục chi phí (nếu có)
        /// </summary>
        public int? CostCategoryId { get; set; }

        /// <summary>
        /// Tên danh mục
        /// </summary>
        public string CategoryName { get; set; } = string.Empty;

        /// <summary>
        /// ID danh mục cha
        /// </summary>
        public int? ParentId { get; set; }

        /// <summary>
        /// Cấp độ trong cây
        /// </summary>
        public int Level { get; set; }

        /// <summary>
        /// Thứ tự hiển thị
        /// </summary>
        public int DisplayOrder { get; set; }

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

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

