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>
/// Thẻ xăng dầu (thẻ tín dụng) - Dùng để quản lý chi phí đổ dầu cho xe tải.
/// Lưu ý: Khác với BankAccount (tài khoản thanh toán), FuelCard là thẻ tín dụng.
/// - BankAccount.Balance = Số tiền công ty CÓ (dương)
/// - FuelCard.CurrentDebt = Số tiền công ty NỢ ngân hàng (luôn dương hoặc 0)
/// </summary>
public class FuelCard : BaseEntityWithKey<int>
{
    /// <summary>
    /// Số thẻ (có thể che một phần: 52347217____5261)
    /// </summary>
    [Required]
    [MaxLength(50)]
    public string CardNumber { get; set; } = string.Empty;

    /// <summary>
    /// Tên chủ thẻ
    /// </summary>
    [MaxLength(256)]
    public string CardholderName { get; set; } = string.Empty;

    /// <summary>
    /// Tên ngân hàng phát hành thẻ tín dụng
    /// </summary>
    [MaxLength(256)]
    public string BankName { get; set; } = string.Empty;

    /// <summary>
    /// Loại thẻ (Visa, MasterCard, JCB...)
    /// </summary>
    [MaxLength(50)]
    public string CardType { get; set; } = string.Empty;

    /// <summary>
    /// ID người phụ trách thẻ (nullable - có thể là bất kỳ ai trong công ty)
    /// </summary>
    public int? ResponsibleUserId { get; set; }

    /// <summary>
    /// Trạng thái thẻ
    /// </summary>
    public FuelCardStatus Status { get; set; } = FuelCardStatus.Active;

    /// <summary>
    /// Ngày hết hạn thẻ
    /// </summary>
    public DateTimeOffset? ExpiryDate { get; set; }

    /// <summary>
    /// Hạn mức tín dụng của thẻ
    /// </summary>
    public decimal? CreditLimit { get; set; }

    /// <summary>
    /// Số nợ hiện tại (tính từ các giao dịch chưa thanh toán cho ngân hàng)
    /// Luôn >= 0
    /// </summary>
    public decimal CurrentDebt { get; set; } = 0;

    /// <summary>
    /// Ghi chú
    /// </summary>
    [MaxLength(1024)]
    public string Notes { get; set; } = string.Empty;

    #region Navigation Properties

    /// <summary>
    /// Người phụ trách thẻ
    /// </summary>
    public virtual User? ResponsibleUser { get; set; }

    /// <summary>
    /// Danh sách giao dịch thẻ
    /// </summary>
    public virtual ICollection<FuelCardTransaction> FuelCardTransactions { get; set; } = new List<FuelCardTransaction>();

    /// <summary>
    /// Danh sách import sao kê
    /// </summary>
    public virtual ICollection<FuelCardStatementImport> FuelCardStatementImports { get; set; } = new List<FuelCardStatementImport>();

    #endregion
}
