using System;
using AsbCloudApp.Data.WellOperation;

namespace AsbCloudApp.Data
{
    /// <summary>
    /// dto для хранения данных статистики сауб
    /// </summary>
    public class DataSaubStatDto:IId
    {
        /// <summary>
        /// 
        /// </summary>
        public int Id { get; set; }

        /// <summary>
        /// Дата и время начала
        /// </summary>
        public DateTimeOffset DateStart { get; set; }

        /// <summary>
        /// Дата и время окончания
        /// </summary>
        public DateTimeOffset DateEnd { get; set; }

        /// <summary>
        /// Глубина забоя по стволу начальная
        /// </summary>
        public double DepthStart { get; set; }

        /// <summary>
        /// Глубина забоя по стволу конечная
        /// </summary>
        public double DepthEnd { get; set; }

        /// <summary>
        /// Скорость бурения
        /// </summary>
        public double Speed { get; set; }

        /// <summary>
        /// Ограничение скорости блока
        /// </summary>
        public double? BlockSpeedSp { get; set; }

        /// <summary>
        /// Давление
        /// </summary>
        public double Pressure { get; set; }

        /// <summary>
        /// Давление холостого хода
        /// </summary>
        public double? PressureIdle { get; set; }

        /// <summary>
        /// Ограничение фактического давления
        /// </summary>
        public double? PressureSp { get; set; }

        /// <summary>
        /// Фактическая нагрузка
        /// </summary>
        public double AxialLoad { get; set; }

        /// <summary>
        /// Ограничение факт. нагрузки
        /// </summary>
        public double? AxialLoadSp { get; set; }

        /// <summary>
        /// Максимально допустимая нагрузка
        /// </summary>
        public double? AxialLoadLimitMax { get; set; }

        /// <summary>
        /// Фактический момент
        /// </summary>
        public double RotorTorque { get; set; }

        /// <summary>
        /// Ограничение факт. момента
        /// </summary>
        public double? RotorTorqueSp { get; set; }

        /// <summary>
        /// Максимально допустимый момент
        /// </summary>
        public double? RotorTorqueLimitMax { get; set; }

        /// <summary>
        /// Работа при достижении ограничения
        /// </summary>
        public short? IdFeedRegulator { get; set; }

        /// <summary>
        /// Фактическая скорость оборотов ВСП
        /// </summary>
        public double RotorSpeed { get; set; }

        /// <summary>
        /// Название автоопределённой операции
        /// </summary>
        public int IdCategory { get; set; }

        /// <summary>
        /// Флаги подсистем
        /// </summary>
        public int EnabledSubsystems { get; set; }

        /// <summary>
        /// Наличие или отсутствие осцилляции
        /// </summary>
        public bool HasOscillation { get; set; }

        /// <summary>
        /// Фактический расход
        /// </summary>
        public double Flow { get; set; }

        /// <summary>
        /// Ключ телеметрии
        /// </summary>
        public int IdTelemetry { get; set; }

        /// <summary>
        /// Телеметрия
        /// </summary>
        public TelemetryDto Telemetry { get; set; } = null!;

        /// <summary>
        /// Категория автоопределенной операции
        /// </summary>
        public WellOperationCategoryDto OperationCategory { get; set; } = null!;
    }
}