using System;

namespace AsbCloudApp.Data.DetectedOperation
{
#nullable enable
    /// <summary>
    /// Автоматически определяемая операция
    /// </summary>
    public class DetectedOperationDto : IId, IWellRelated
    {
        /// <inheritdoc/>
        public int Id { get; set; }

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

        /// <summary>
        /// Id названия/описания операции
        /// </summary>
        public int IdCategory { get; set; }

        /// <summary>
        /// Id пользователя панели
        /// </summary>
        public int IdUsersAtStart { get; set; }

        /// <summary>
        /// Дата начала операции в часовом поясе скважины
        /// </summary>
        public DateTime DateStart { get; set; }

        /// <summary>
        /// Дата завершения операции в часовом поясе скважины
        /// </summary>
        public DateTime DateEnd { get; set; }

        /// <summary>
        /// Продолжительность операции в минутах
        /// </summary>
        public double DurationMinutes => (DateEnd - DateStart).TotalMinutes;

        /// <summary>
        /// глубина на начало операции, м
        /// </summary>
        public double DepthStart { get; set; }

        /// <summary>
        /// глубина на завершения операции, м
        /// </summary>
        public double DepthEnd { get; set; }

        /// <summary>
        /// название/описание операции
        /// </summary>
        public WellOperationCategoryDto OperationCategory { get; set; } = null!;

        /// <summary>
        /// Пользователь панели оператора
        /// </summary>
        public string? TelemetryUserName { get; set; }

        /// <summary>
        /// Бурильщик
        /// </summary>
        public DrillerDto? Driller { get; set; }

        /// <summary>
        /// Целевые/нормативные показатели
        /// </summary>
        public OperationValueDto? OperationValue { get; set; }

        /// <summary>
        /// Ключевой параметр операции
        /// </summary>
        public double Value { get; set; }
    }
#nullable disable
}