using System.ComponentModel.DataAnnotations;

namespace Ladaer.BackEnd.Infrastructures.DTO.Models.Finances
{
    /// <summary>
    /// Model thực hiện chuyển tiền đối soát
    /// </summary>
    public class TransferReconciliationModel
    {
        /// <summary>
        /// ID đối soát
        /// </summary>
        [Required(ErrorMessage = "Vui lòng chọn đối soát")]
        public int ReconciliationId { get; set; }





        /// <summary>
        /// Phương thức chuyển tiền
        /// </summary>
        public TransferMethod TransferMethod { get; set; } = TransferMethod.BankTransfer;

        /// <summary>
        /// Ghi chú chuyển tiền
        /// </summary>
        [MaxLength(1024, ErrorMessage = "Ghi chú không được vượt quá 1024 ký tự")]
        public string Note { get; set; } = string.Empty;

        /// <summary>
        /// Thông tin bổ sung (JSON hoặc text)
        /// </summary>
        [MaxLength(2048, ErrorMessage = "Thông tin bổ sung không được vượt quá 2048 ký tự")]
        public string AdditionalInfo { get; set; } = string.Empty;

        /// <summary>
        /// Có tạo giao dịch tự động không
        /// </summary>
        public bool CreateTransaction { get; set; } = true;

        /// <summary>
        /// Có gửi thông báo cho khách hàng không
        /// </summary>
        public bool SendNotification { get; set; } = true;

        /// <summary>
        /// Người thực hiện (sẽ được set từ controller)
        /// </summary>
        public int TransferredBy { get; set; }

        /// <summary>
        /// Tên người thực hiện (sẽ được set từ controller)
        /// </summary>
        public string TransferredByUsername { get; set; } = string.Empty;

        /// <summary>
        /// Validate model
        /// </summary>
        /// <returns></returns>
        public List<string> Validate()
        {
            var errors = new List<string>();

            if (ReconciliationId <= 0)
            {
                errors.Add("Vui lòng chọn đối soát");
            }

            return errors;
        }
    }

    /// <summary>
    /// Phương thức chuyển tiền
    /// </summary>
    public enum TransferMethod
    {
        [System.ComponentModel.Description("Chuyển khoản ngân hàng")]
        BankTransfer = 1,

        [System.ComponentModel.Description("Tiền mặt")]
        Cash = 2,

        [System.ComponentModel.Description("Ví điện tử")]
        EWallet = 3,

        [System.ComponentModel.Description("Séc")]
        Check = 4,

        [System.ComponentModel.Description("Khác")]
        Other = 99
    }
}
