using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using AsbCloudApp.Data.User;

namespace AsbCloudApp.Data
{
    /// <summary>
    /// DTO информации о файле. Используется для загрузки файла.
    /// </summary>
    public class FileInfoDto : IId, IWellRelated
    {
        /// <inheritdoc/>
        [Required]
        public int Id { get; set; }

        /// <inheritdoc/>
        [Required]
        [Range(1, int.MaxValue, ErrorMessage = "Id скважины не может быть меньше 1")]
        public int IdWell { get; set; }

        /// <summary>
        /// id категории файла
        /// </summary>
        [Required]
        [Range(1, int.MaxValue, ErrorMessage = "Id категории файла не может быть меньше 1")]
        public int IdCategory { get; set; }

        /// <summary>
        /// Id автора
        /// </summary>
        public int? IdAuthor { get; set; }

        /// <summary>
        /// имя файла
        /// </summary>
        [Required]
        [StringLength(260, MinimumLength = 1, ErrorMessage = "Допустимое имя компании от 1 до 260 символов")]
        public string Name { get; set; } = null!;

        /// <summary>
        /// дата загрузки
        /// </summary>
        [Required]
        public DateTimeOffset UploadDate { get; set; }

        /// <summary>
        /// размер в байтах
        /// </summary>
        [Required]
        public long Size { get; set; }

        /// <summary>
        /// Помечен как удаленный
        /// </summary>
        [Required]
        public bool IsDeleted { get; set; }

        /// <summary>
        /// DTO автора
        /// </summary>
        public UserDto? Author { get; set; }

        /// <summary>
        /// список отметок файла
        /// </summary>
        [Required]
        public IEnumerable<FileMarkDto> FileMarks { get; set; } = Enumerable.Empty<FileMarkDto>();
    }
}