using System.ComponentModel.DataAnnotations;
using Lada.Framework.Data.Enums;
using Lada.Framework.DTO;
using Microsoft.AspNetCore.Http;

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

/// <summary>
/// Model đổ dầu cho lái xe trên app mobile.
/// Lái xe là người đăng nhập, xe là xe đang phụ trách (tự động xác định).
/// </summary>
public class DriverFuelRefillModel : BaseModel<int>
{
    /// <summary>
    /// ID thẻ xăng dầu (nullable - có thể của mình hoặc người khác, hoặc trả tiền mặt)
    /// </summary>
    public int? FuelCardId { 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>
    /// 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>
    /// Phương thức thanh toán: Card(1) hoặc Cash(2)
    /// </summary>
    [Required]
    public FuelRefillPaymentMethod PaymentMethod { get; set; } = FuelRefillPaymentMethod.Card;

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

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

    /// <summary>
    /// Thời gian đổ dầu
    /// </summary>
    [Required(ErrorMessage = "Thời gian đổ dầu là bắt buộc")]
    public DateTimeOffset RefillTime { get; set; }

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

    /// <summary>
    /// Danh sách hình ảnh (ODO trước, ODO sau, cây dầu, hóa đơn)
    /// </summary>
    public List<IFormFile>? Files { get; set; } = new List<IFormFile>();

    /// <summary>
    /// Loại hình ảnh tương ứng (OdoBeforePhoto, OdoAfterPhoto, FuelPumpPhoto, FuelReceiptPhoto)
    /// Phải tương ứng 1-1 với Files
    /// </summary>
    public List<TruckActivityMediaType> MediaTypes { get; set; } = new List<TruckActivityMediaType>();
}
