using Lada.Framework.Data.Domains.Finance;
using Lada.Framework.DTO;
using Lada.Framework.Infrastructures.Helpers;

namespace Ladaer.BackEnd.Infrastructures.DTO.Items.Finance
{
    /// <summary>
    /// DTO item cho hiển thị danh sách hóa đơn thanh toán chuyển khoản
    /// </summary>
    public class TransferPaymentBillItem : BaseItem<int>
    {
        /// <summary>
        /// Mã hóa đơn
        /// </summary>
        public string Code { get; set; } = string.Empty;

        /// <summary>
        /// ID khách hàng
        /// </summary>
        public int CustomerId { get; set; }

        /// <summary>
        /// Tên khách hàng
        /// </summary>
        public string CustomerName { get; set; } = string.Empty;

        /// <summary>
        /// Số điện thoại khách hàng
        /// </summary>
        public string CustomerPhone { get; set; } = string.Empty;

        /// <summary>
        /// Từ ngày
        /// </summary>
        public DateTimeOffset FromDate { get; set; }

        /// <summary>
        /// Đến ngày
        /// </summary>
        public DateTimeOffset ToDate { get; set; }

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

        /// <summary>
        /// Tổng tiền TransferFee (formatted)
        /// </summary>
        public string TotalAmountFormatted => TotalAmount.FormatCurrency();

        /// <summary>
        /// Số đơn hàng
        /// </summary>
        public int OrderCount { get; set; }

        /// <summary>
        /// Trạng thái hóa đơn
        /// </summary>
        public TransferPaymentBillStatus Status { get; set; }

        /// <summary>
        /// Tên trạng thái hóa đơn
        /// </summary>
        public string StatusName => Status.GetDescription();

        /// <summary>
        /// Mức độ ưu tiên
        /// </summary>
        public TransferPaymentBillPriority Priority { get; set; }

        /// <summary>
        /// Tên mức độ ưu tiên
        /// </summary>
        public string PriorityName => Priority.GetDescription();

        /// <summary>
        /// Người tạo
        /// </summary>
        public string CreatedByUserName { get; set; } = string.Empty;

        /// <summary>
        /// Thời gian tạo
        /// </summary>
        public DateTimeOffset CreatedTime { get; set; }

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

        /// <summary>
        /// Người duyệt
        /// </summary>
        public string ApprovedByUsername { get; set; } = string.Empty;

        /// <summary>
        /// Ngày duyệt
        /// </summary>
        public DateTimeOffset? ApprovedDate { get; set; }

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

        /// <summary>
        /// Thông tin chuyển khoản
        /// </summary>
        public string TransferInfo { get; set; } = string.Empty;

        /// <summary>
        /// Số tài khoản ngân hàng công ty/đại lý
        /// </summary>
        public string CompanyBankAccountNumber { get; set; } = string.Empty;

        /// <summary>
        /// Tên chủ tài khoản công ty/đại lý
        /// </summary>
        public string CompanyBankAccountHolderName { get; set; } = string.Empty;

        /// <summary>
        /// Tên ngân hàng công ty/đại lý
        /// </summary>
        public string CompanyBankName { get; set; } = string.Empty;

        /// <summary>
        /// Có thể chỉnh sửa không (chỉ người tạo và trạng thái Draft)
        /// </summary>
        public bool CanEdit { get; set; }

        /// <summary>
        /// Có thể hủy không (chỉ người tạo và trạng thái Draft)
        /// </summary>
        public bool CanCancel { get; set; }

        /// <summary>
        /// Có thể duyệt không (role Accountant và trạng thái Draft)
        /// </summary>
        public bool CanApprove { get; set; }
    }
}
