using System.ComponentModel.DataAnnotations;

namespace Ladaer.BackEnd.Infrastructures.DTO.Models.Finances
{
    /// <summary>
    /// Model hủy đối soát
    /// </summary>
    public class CancelReconciliationModel
    {
        /// <summary>
        /// ID đối soát cần hủy
        /// </summary>
        [Required(ErrorMessage = "ID đối soát không được để trống")]
        [Range(1, int.MaxValue, ErrorMessage = "ID đối soát không hợp lệ")]
        public int ReconciliationId { get; set; }

        /// <summary>
        /// Lý do hủy đối soát
        /// </summary>
        [Required(ErrorMessage = "Lý do hủy không được để trống")]
        [MaxLength(1024, ErrorMessage = "Lý do hủy không được vượt quá 1024 ký tự")]
        public string CancelReason { get; set; } = string.Empty;

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

        /// <summary>
        /// Người hủy (sẽ được set từ controller)
        /// </summary>
        public int CancelledBy { get; set; }

        /// <summary>
        /// Tên người hủy (sẽ được set từ controller)
        /// </summary>
        public string CancelledByUsername { get; set; } = string.Empty;

        /// <summary>
        /// Thời gian hủy (sẽ được set từ service)
        /// </summary>
        public DateTimeOffset CancelledTime { get; set; }

        /// <summary>
        /// Có tạo OrderTrack không (mặc định true)
        /// </summary>
        public bool CreateOrderTrack { get; set; } = true;

        /// <summary>
        /// Có gửi thông báo không (mặc định false)
        /// </summary>
        public bool SendNotification { get; set; } = false;

        /// <summary>
        /// Validate model
        /// </summary>
        /// <returns>Danh sách lỗi validation</returns>
        public List<string> Validate()
        {
            var errors = new List<string>();

            if (ReconciliationId <= 0)
            {
                errors.Add("ID đối soát không hợp lệ");
            }

            if (string.IsNullOrWhiteSpace(CancelReason))
            {
                errors.Add("Lý do hủy không được để trống");
            }
            else if (CancelReason.Length > 1024)
            {
                errors.Add("Lý do hủy không được vượt quá 1024 ký tự");
            }

            if (!string.IsNullOrEmpty(Note) && Note.Length > 2048)
            {
                errors.Add("Ghi chú không được vượt quá 2048 ký tự");
            }

            return errors;
        }
    }
}
