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.Trucks;

/// <summary>
/// Thanh toán tiền dầu khoán cho lái xe.
/// Khi công ty thanh toán số dư dầu khoán cho lái xe.
/// </summary>
public class FuelQuotaPayment : BaseEntityWithKey<int>
{
    /// <summary>
    /// ID lái xe được thanh toán
    /// </summary>
    public int DriverId { get; set; }

    /// <summary>
    /// Ngày thanh toán
    /// </summary>
    public DateTimeOffset PaymentDate { get; set; }

    /// <summary>
    /// Số lít được thanh toán
    /// </summary>
    public decimal PaidLiters { get; set; }

    /// <summary>
    /// Đơn giá dầu tại thời điểm thanh toán (VD: 21,000 VND/lít)
    /// </summary>
    public decimal FuelUnitPrice { get; set; }

    /// <summary>
    /// Số tiền thanh toán = PaidLiters x FuelUnitPrice
    /// </summary>
    public decimal PaidAmount { get; set; }

    /// <summary>
    /// Số dư trước thanh toán
    /// </summary>
    public decimal BalanceBeforeLiters { get; set; }

    /// <summary>
    /// Số dư sau thanh toán
    /// </summary>
    public decimal BalanceAfterLiters { get; set; }

    /// <summary>
    /// Phương thức thanh toán (Tiền mặt, Chuyển khoản...)
    /// </summary>
    [MaxLength(100)]
    public string PaymentMethod { get; set; } = string.Empty;

    /// <summary>
    /// Mã tham chiếu thanh toán (số chứng từ, mã giao dịch...)
    /// </summary>
    [MaxLength(256)]
    public string PaymentReference { get; set; } = string.Empty;

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

    /// <summary>
    /// ID người duyệt thanh toán
    /// </summary>
    public int? ApprovedByUserId { get; set; }

    /// <summary>
    /// Tên người duyệt thanh toán
    /// </summary>
    [MaxLength(256)]
    public string ApprovedByUserName { get; set; } = string.Empty;

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

    /// <summary>
    /// Trạng thái thanh toán
    /// </summary>
    public FuelQuotaPaymentStatus Status { get; set; } = FuelQuotaPaymentStatus.Pending;

    #region Navigation Properties

    /// <summary>
    /// Lái xe được thanh toán
    /// </summary>
    public virtual User Driver { get; set; } = null!;

    /// <summary>
    /// Người duyệt thanh toán
    /// </summary>
    public virtual User? ApprovedByUser { get; set; }

    #endregion
}
