using Lada.Framework.Data.Domains.BaseEntities;
using Lada.Framework.Data.Enums;
using System.ComponentModel.DataAnnotations;

namespace Lada.Framework.Data.Domains.ErrorReports
{
    /// <summary>
    /// Entity báo lỗi từ người dùng
    /// </summary>
    public class ErrorReport : BaseEntityWithKey<int>
    {
        /// <summary>
        /// URL trang web xảy ra lỗi
        /// </summary>
        [MaxLength(2048)]
        public string Url { get; set; } = string.Empty;

        /// <summary>
        /// Nội dung mô tả lỗi
        /// </summary>
        [MaxLength(2000)]
        public string ErrorDescription { get; set; } = string.Empty;

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

        /// <summary>
        /// Ghi chú từ admin khi xử lý
        /// </summary>
        [MaxLength(1000)]
        public string AdminNote { get; set; } = string.Empty;

        /// <summary>
        /// ID người dùng báo lỗi (nếu có)
        /// </summary>
        public int? ReportedByUserId { get; set; }

        /// <summary>
        /// Tên người báo lỗi (nếu không đăng nhập)
        /// </summary>
        [MaxLength(255)]
        public string ReporterName { get; set; } = string.Empty;

        /// <summary>
        /// Email người báo lỗi
        /// </summary>
        [MaxLength(255)]
        public string ReporterEmail { get; set; } = string.Empty;

        /// <summary>
        /// Số điện thoại người báo lỗi
        /// </summary>
        [MaxLength(20)]
        public string ReporterPhone { get; set; } = string.Empty;

        /// <summary>
        /// Thông tin trình duyệt
        /// </summary>
        [MaxLength(500)]
        public string BrowserInfo { get; set; } = string.Empty;

        /// <summary>
        /// Thông tin thiết bị
        /// </summary>
        [MaxLength(500)]
        public string DeviceInfo { get; set; } = string.Empty;

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