using AsbCloudApp.Validation;
using System;
using System.ComponentModel.DataAnnotations;

namespace AsbCloudApp.Data
{
    /// <summary>
    /// Операции на скважине (заведенные пользователем)
    /// </summary>
    public class WellOperationDto : ItemInfoDto, IId, IWellRelated
    {
        /// <inheritdoc/>
        public int Id { get; set; }

        /// <inheritdoc/>
        [Required]
        public int IdWell { get; set; }

        /// <summary>
        /// id секции скважины
        /// </summary>
        [Required]
        public int IdWellSectionType { get; set; }

        /// <summary>
        /// название секции скважины
        /// </summary>
        public string? WellSectionTypeName { get; set; }

        /// <summary>
        /// id категории операции
        /// </summary>
        [Required]
        [Range(5000, int.MaxValue)]
        public int IdCategory { get; set; }

        /// <summary>
        /// id плановой операции для сопоставления
        /// </summary>
        public int? IdPlan { get; set; }

        /// <summary>
        /// название категории операции
        /// </summary>
        public string? CategoryName { get; set; }

        /// <summary>
        /// ключ родителя у категории
        /// </summary>
        public int? IdParentCategory { get; set; }

        /// <summary>
        /// дополнительная информация по операции
        /// </summary>
        [StringLength(8192)]
        public string? CategoryInfo { get; set; }

        /// <summary>
        /// 0 = план или 1 = факт или прогноз = 2
        /// </summary>
        [Required]
        public int IdType { get; set; }

        /// <summary>
        /// Глубина на начало операции, м
        /// </summary>
        [Range(0, 50_000)]
        public double DepthStart { get; set; }

        /// <summary>
        /// Глубина после завершения операции, м
        /// </summary>
        [Range(0, 50_000)]
        public double DepthEnd { get; set; }

        /// <summary>
        /// Кол-во дней от даты начала первой плановой (а если её нет, то фактической) операции
        /// </summary>
        public double Day { get; set; }

        /// <summary>
        /// Кол-во часов НПВ от даты начала первой плановой (а если её нет, то фактической) операции
        /// </summary>
        public double NptHours { get; set; }

        /// <summary>
        /// Дата начала операции
        /// </summary>
        [DateValidation(GtDate = "2010-01-01T00:00:00")]
        public DateTime DateStart { get; set; }

        /// <summary>
        /// Продолжительность, часы
        /// </summary>
        [Range(0, 50)]
        public double DurationHours { get; set; }

        /// <summary>
        /// Полезный комментарий
        /// </summary>
        [StringLength(4096, ErrorMessage = "Комментарий не может быть длиннее 4096 символов")]
        public string? Comment { get; set; }
    }
}