using Lada.Framework.DTO;

namespace Ladaer.BackEnd.Infrastructures.DTO.Results.Finance
{
    /// <summary>
    /// Kết quả xuất Excel phiếu chuyển khoản
    /// </summary>
    public class TransferPaymentBillExcelExportResult : BaseResult
    {
        /// <summary>
        /// Đường dẫn file Excel đã tạo
        /// </summary>
        public string? FilePath { get; set; }

        /// <summary>
        /// Tên file Excel
        /// </summary>
        public string? FileName { get; set; }

        /// <summary>
        /// Kích thước file (bytes)
        /// </summary>
        public long FileSize { get; set; }

        /// <summary>
        /// Tổng số bản ghi đã xuất
        /// </summary>
        public int TotalRecords { get; set; }

        /// <summary>
        /// URL download file
        /// </summary>
        public string? DownloadUrl { get; set; }

        /// <summary>
        /// Thời gian bắt đầu xử lý
        /// </summary>
        public DateTimeOffset ProcessStartTime { get; set; }

        /// <summary>
        /// Thời gian kết thúc xử lý
        /// </summary>
        public DateTimeOffset ProcessEndTime { get; set; }

        /// <summary>
        /// Thời gian xử lý (ms)
        /// </summary>
        public long ProcessingTimeMs => (ProcessEndTime - ProcessStartTime).TotalMilliseconds > 0 
            ? (long)(ProcessEndTime - ProcessStartTime).TotalMilliseconds 
            : 0;

        /// <summary>
        /// Thông tin chi tiết quá trình xử lý
        /// </summary>
        public TransferPaymentBillExcelProcessInfo ProcessInfo { get; set; } = new();
    }

    /// <summary>
    /// Thông tin chi tiết quá trình xử lý xuất Excel
    /// </summary>
    public class TransferPaymentBillExcelProcessInfo
    {
        /// <summary>
        /// Thời gian query database (ms)
        /// </summary>
        public long DatabaseQueryTimeMs { get; set; }

        /// <summary>
        /// Thời gian chuyển đổi dữ liệu (ms)
        /// </summary>
        public long DataConversionTimeMs { get; set; }

        /// <summary>
        /// Thời gian tạo file Excel (ms)
        /// </summary>
        public long ExcelGenerationTimeMs { get; set; }

        /// <summary>
        /// Thời gian lưu file (ms)
        /// </summary>
        public long FileSaveTimeMs { get; set; }

        /// <summary>
        /// Tổng thời gian xử lý (ms)
        /// </summary>
        public long TotalProcessingTimeMs => DatabaseQueryTimeMs + DataConversionTimeMs + ExcelGenerationTimeMs + FileSaveTimeMs;
    }
}
