using System;
using System.ComponentModel.DataAnnotations;

namespace AsbCloudApp.Data
{
    /// <summary>
    /// Операции на скважине (заведенные пользователем)
    /// </summary>
    public class WellOperationDto : 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; } = null!;

        /// <summary>
        /// id категории операции
        /// </summary>
        [Required]
        public int IdCategory { get; set; }

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

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

        /// <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>
        public DateTime DateStart { get; set; }

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

        /// <summary>
        /// Полезный комментарий
        /// </summary>
        [StringLength(8192)]
        public string? Comment { get; set; }
    }
}