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

namespace Ladaer.BackEnd.Infrastructures.DTO.Items.Finances
{
    public class ExpenseItem : BaseItem<Guid>
    {
        /// <summary>
        /// Mô tả chi phí
        /// </summary>
        public string Description { get; set; } = string.Empty;

        /// <summary>
        /// Ghi chú cho chi phí
        /// </summary>
        public string Note { get; set; } = string.Empty;

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

        /// <summary>
        /// Danh mục chi phí
        /// </summary>
        public int ExpenseCategoryId { get; set; }
        public string ExpenseCategoryName { get; set; } = string.Empty;

        /// <summary>
        /// Trạng thái chi phí
        /// </summary>
        public ExpenseStatus Status { get; set; }



        /// <summary>
        /// UserId của người duyệt
        /// </summary>
        public int? ApprovedBy { get; set; }

        /// <summary>
        /// Tên người duyệt
        /// </summary>
        public string ApprovedByUserName { get; set; } = "";

        /// <summary>
        /// Lý do từ chối (nếu có)
        /// </summary>
        public string? RejectReason { get; set; }

        /// <summary>
        /// Có được phép duyệt chi phí này không
        /// </summary>
        public bool CanApprove { get; set; }

        /// <summary>
        /// Có được phép từ chối chi phí này không
        /// </summary>
        public bool CanReject { get; set; }

        /// <summary>
        /// Có được phép đánh dấu đã thanh toán không
        /// </summary>
        public bool CanMarkAsPaid { get; set; }

        /// <summary>
        /// ID tài khoản ngân hàng nhận tiền (chỉ để reference)
        /// </summary>
        public int? UserBankAccountId { get; set; }

        /// <summary>
        /// Thông tin tài khoản ngân hàng nhận tiền (formatted)
        /// </summary>
        public string UserBankAccountInfo { get; set; } = "";

        /// <summary>
        /// Số tài khoản ngân hàng
        /// </summary>
        public string? BankAccountNumber { get; set; }

        /// <summary>
        /// Tên chủ tài khoản
        /// </summary>
        public string? BankAccountHolderName { get; set; }

        /// <summary>
        /// Mã ngân hàng
        /// </summary>
        public string? BankCode { get; set; }

        /// <summary>
        /// Tên ngân hàng
        /// </summary>
        public string? BankName { get; set; }

        /// <summary>
        /// Tên chi nhánh ngân hàng
        /// </summary>
        public string? BankBranchName { get; set; }

        /// <summary>
        /// Danh sách lịch sử thay đổi trạng thái
        /// </summary>
        public List<ExpenseHistoryItem> Histories { get; set; } = new List<ExpenseHistoryItem>();
    }
}