using System.ComponentModel.DataAnnotations;
using Lada.Framework.Data.Domains.BaseEntities;
using Lada.Framework.Data.Domains.Identity;
using Lada.Framework.Data.Enums;

namespace Lada.Framework.Data.Domains.Finance;

/// <summary>
/// Import sao kê thẻ xăng dầu (thẻ tín dụng) từ file Excel.
/// Tương tự BankStatementImport nhưng dành riêng cho thẻ tín dụng xăng dầu.
/// </summary>
public class FuelCardStatementImport : BaseEntityWithKey<Guid>
{
    /// <summary>
    /// ID thẻ xăng dầu được import
    /// </summary>
    public int FuelCardId { get; set; }

    /// <summary>
    /// Tên file gốc
    /// </summary>
    [MaxLength(512)]
    public string OriginalFileName { get; set; } = string.Empty;

    /// <summary>
    /// Đường dẫn file đã lưu
    /// </summary>
    [MaxLength(1024)]
    public string FilePath { get; set; } = string.Empty;

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

    /// <summary>
    /// Kỳ sao kê từ ngày
    /// </summary>
    public DateTimeOffset? StatementPeriodFrom { get; set; }

    /// <summary>
    /// Kỳ sao kê đến ngày
    /// </summary>
    public DateTimeOffset? StatementPeriodTo { get; set; }

    /// <summary>
    /// Tổng số dòng trong file
    /// </summary>
    public int TotalRows { get; set; }

    /// <summary>
    /// Số dòng xử lý thành công
    /// </summary>
    public int ProcessedRows { get; set; }

    /// <summary>
    /// Số dòng lỗi
    /// </summary>
    public int ErrorRows { get; set; }

    /// <summary>
    /// Số dòng bỏ qua
    /// </summary>
    public int SkippedRows { get; set; }

    /// <summary>
    /// Số dòng trùng lặp
    /// </summary>
    public int DuplicateRows { get; set; }

    /// <summary>
    /// Tổng số giao dịch được import
    /// </summary>
    public int TotalTransactions { get; set; }

    /// <summary>
    /// Tổng số tiền chi tiêu trong kỳ
    /// </summary>
    public decimal TotalAmount { get; set; }

    /// <summary>
    /// Trạng thái import
    /// </summary>
    public ImportStatus ImportStatus { get; set; } = ImportStatus.Processing;

    /// <summary>
    /// Thông báo lỗi (nếu có)
    /// </summary>
    [MaxLength(2048)]
    public string ErrorMessage { get; set; } = string.Empty;

    /// <summary>
    /// Chi tiết lỗi (JSON format)
    /// </summary>
    public string ErrorDetails { get; set; } = string.Empty;

    /// <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>
    /// Người thực hiện import
    /// </summary>
    public int ImportedByUserId { get; set; }

    /// <summary>
    /// Tên người thực hiện import
    /// </summary>
    [MaxLength(256)]
    public string ImportedByUserName { get; set; } = string.Empty;

    #region Navigation Properties

    /// <summary>
    /// Thẻ xăng dầu
    /// </summary>
    public virtual FuelCard FuelCard { get; set; } = null!;

    /// <summary>
    /// Người thực hiện import
    /// </summary>
    public virtual User ImportedByUser { get; set; } = null!;

    /// <summary>
    /// Danh sách giao dịch được import
    /// </summary>
    public virtual ICollection<FuelCardTransaction> FuelCardTransactions { get; set; } = new List<FuelCardTransaction>();

    #endregion
}
