using System.ComponentModel.DataAnnotations;
using Microsoft.AspNetCore.Http;

namespace Ladaer.BackEnd.Infrastructures.DTO.Models.Finances
{
    /// <summary>
    /// Model yêu cầu chuyển tiền giữa 2 ví
    /// Ví nguồn sẽ được lấy tự động từ người dùng đang đăng nhập
    /// </summary>
    public class TransferWalletModel
    {
        /// <summary>
        /// ID ví đích (ví nhận tiền)
        /// </summary>
        [Required(ErrorMessage = "Vui lòng chọn ví đích")]
        public int DestinationWalletId { get; set; }

        /// <summary>
        /// Số tiền cần chuyển
        /// </summary>
        [Required(ErrorMessage = "Vui lòng nhập số tiền")]
        [Range(1, double.MaxValue, ErrorMessage = "Số tiền phải lớn hơn 0")]
        public decimal Amount { get; set; }

        /// <summary>
        /// Ghi chú cho giao dịch
        /// </summary>
        [MaxLength(500)]
        public string? Note { get; set; }

        /// <summary>
        /// Request ID để đảm bảo idempotency (tránh chuyển tiền trùng khi retry)
        /// Nếu không truyền, hệ thống sẽ tự tạo
        /// </summary>
        public Guid? RequestId { get; set; }

        /// <summary>
        /// Người thực hiện giao dịch
        /// </summary>
        public int UpdatedBy { get; set; }

        /// <summary>
        /// Username người thực hiện giao dịch
        /// </summary>
        public string UpdatedByUserName { get; set; } = string.Empty;

        /// <summary>
        /// File ảnh chứng từ giao dịch chuyển tiền (bắt buộc)
        /// </summary>
        [Required(ErrorMessage = "Vui lòng upload ảnh chứng từ")]
        public required IFormFile ProofImage { get; set; }
    }
}

