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

namespace Ladaer.BackEnd.Infrastructures.DTO.Models.ErrorReports
{
    /// <summary>
    /// Model để tạo mới báo lỗi
    /// </summary>
    public class ErrorReportModel
    {
        /// <summary>
        /// URL trang web xảy ra lỗi
        /// </summary>
        [Required(ErrorMessage = "URL là bắt buộc")]
        [MaxLength(2048, ErrorMessage = "URL không được vượt quá 2048 ký tự")]
        public string Url { get; set; } = string.Empty;

        /// <summary>
        /// Nội dung mô tả lỗi
        /// </summary>
        [Required(ErrorMessage = "Mô tả lỗi là bắt buộc")]
        [MaxLength(2000, ErrorMessage = "Mô tả lỗi không được vượt quá 2000 ký tự")]
        public string ErrorDescription { get; set; } = string.Empty;

        /// <summary>
        /// Tên người báo lỗi (nếu không đăng nhập)
        /// </summary>
        [MaxLength(255, ErrorMessage = "Tên người báo lỗi không được vượt quá 255 ký tự")]
        public string ReporterName { get; set; } = string.Empty;

        /// <summary>
        /// Email người báo lỗi
        /// </summary>
        [EmailAddress(ErrorMessage = "Email không hợp lệ")]
        [MaxLength(255, ErrorMessage = "Email không được vượt quá 255 ký tự")]
        public string ReporterEmail { get; set; } = string.Empty;

        /// <summary>
        /// Số điện thoại người báo lỗi
        /// </summary>
        [Phone(ErrorMessage = "Số điện thoại không hợp lệ")]
        [MaxLength(20, ErrorMessage = "Số điện thoại không được vượt quá 20 ký tự")]
        public string ReporterPhone { get; set; } = string.Empty;

        /// <summary>
        /// Thông tin trình duyệt
        /// </summary>
        [MaxLength(500, ErrorMessage = "Thông tin trình duyệt không được vượt quá 500 ký tự")]
        public string BrowserInfo { get; set; } = string.Empty;

        /// <summary>
        /// Thông tin thiết bị
        /// </summary>
        [MaxLength(500, ErrorMessage = "Thông tin thiết bị không được vượt quá 500 ký tự")]
        public string DeviceInfo { get; set; } = string.Empty;

        /// <summary>
        /// Danh sách hình ảnh lỗi
        /// </summary>
        public List<IFormFile> Images { get; set; } = new List<IFormFile>();
    }

    /// <summary>
    /// Model để cập nhật báo lỗi (dành cho admin)
    /// </summary>
    public class ErrorReportUpdateModel
    {
        /// <summary>
        /// ID báo lỗi
        /// </summary>
        public int Id { get; set; }

        /// <summary>
        /// Trạng thái xử lý báo lỗi
        /// </summary>
        public ErrorReportStatus Status { get; set; }

        /// <summary>
        /// Ghi chú từ admin khi xử lý
        /// </summary>
        [MaxLength(1000, ErrorMessage = "Ghi chú admin không được vượt quá 1000 ký tự")]
        public string AdminNote { get; set; } = string.Empty;
    }
}
