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>();
}