using System.ComponentModel.DataAnnotations;
using Lada.Framework.Data.Enums;
using Lada.Framework.DTO;

namespace Ladaer.BackEnd.Infrastructures.DTO.Models.FuelCards;

/// <summary>
/// Model cập nhật thông tin đổ dầu
/// </summary>
public class FuelRefillUpdateModel : BaseModel<int>
{
    /// <summary>
    /// ID bản ghi đổ dầu cần cập nhật
    /// </summary>
    [Required(ErrorMessage = "ID là bắt buộc")]
    public int Id { get; set; }

    /// <summary>
    /// ID xe tải
    /// </summary>
    public int TruckId { get; set; }

    /// <summary>
    /// ID thẻ xăng dầu (nullable - có thể trả tiền mặt)
    /// </summary>
    public int? FuelCardId { get; set; }

    /// <summary>
    /// ID lái xe thực hiện đổ dầu
    /// </summary>
    public int DriverId { get; set; }

    /// <summary>
    /// ODO hiện tại khi đổ dầu
    /// </summary>
    [Required(ErrorMessage = "Số ODO hiện tại là bắt buộc")]
    [Range(0, int.MaxValue, ErrorMessage = "Số ODO phải lớn hơn hoặc bằng 0")]
    public int CurrentOdo { get; set; }

    /// <summary>
    /// ODO trước đó (bắt buộc)
    /// </summary>
    [Required(ErrorMessage = "Số ODO trước đó là bắt buộc")]
    [Range(0, int.MaxValue, ErrorMessage = "Số ODO trước đó phải lớn hơn hoặc bằng 0")]
    public int PreviousOdo { get; set; }

    /// <summary>
    /// Số tiền đổ dầu
    /// </summary>
    [Required(ErrorMessage = "Số tiền đổ dầu là bắt buộc")]
    [Range(0, double.MaxValue, ErrorMessage = "Số tiền phải lớn hơn 0")]
    public decimal Amount { get; set; }

    /// <summary>
    /// Đơn giá dầu (VND/lít)
    /// </summary>
    [Required(ErrorMessage = "Đơn giá dầu là bắt buộc")]
    [Range(0, double.MaxValue, ErrorMessage = "Đơn giá phải lớn hơn 0")]
    public decimal UnitPrice { get; set; }

    /// <summary>
    /// Số lít đổ thực tế
    /// </summary>
    [Required(ErrorMessage = "Số lít đổ thực tế là bắt buộc")]
    [Range(0, double.MaxValue, ErrorMessage = "Số lít phải lớn hơn 0")]
    public decimal ActualLiters { get; set; }

    /// <summary>
    /// Tên trạm xăng
    /// </summary>
    [MaxLength(256)]
    public string StationName { get; set; } = string.Empty;

    /// <summary>
    /// Địa chỉ trạm xăng
    /// </summary>
    [MaxLength(512)]
    public string StationAddress { get; set; } = string.Empty;

    /// <summary>
    /// Thời gian đổ dầu
    /// </summary>
    public DateTimeOffset RefillTime { get; set; }

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