using System;
using System.ComponentModel.DataAnnotations;

namespace AsbCloudApp.Data.SAUB
{
    /// <summary>
    /// Сообщение получаемое по телеметрии и отправляемое в frontend
    /// </summary>
    public class TelemetryDataSaubDto : ITelemetryData
    {
        /// <summary>
        /// метка времени данных
        /// </summary>
        [Required]
        public DateTime DateTime { get; set; }
        
        /// <summary>
        /// Пользователь САУБ
        /// </summary>
        public int? IdUser { get; set; }

        /// <summary>
        /// Режим работы САУБ:
        /// 0 - "РУЧНОЙ"
        /// 1 - "БУРЕНИЕ В РОТОРЕ"
        /// 2 - "ПРОРАБОТКА"
        /// 3 - "БУРЕНИЕ В СЛАЙДЕ"
        /// 4 - "СПУСК СПО"
        /// 5 - "ПОДЪЕМ СПО"
        /// 6 - "ПОДЪЕМ С ПРОРАБОТКОЙ"
        /// 10 - "БЛОКИРОВКА"
        /// </summary>
        [Required]
        public short Mode { get; set; }

        /// <summary>
        /// telemetry id
        /// </summary>
        public int IdTelemetry { get; set; }

        /// <summary>
        /// telemetry user
        /// </summary>
        public string? User { get; set; }

        /// <summary>
        /// Глубина забоя, м
        /// </summary>
        public float WellDepth { get; set; }

        /// <summary>
        /// Глубина долота, м
        /// </summary>
        public float BitDepth { get; set; }

        /// <summary>
        /// Талевый блок. Положение, м
        /// </summary>
        public float BlockPosition { get; set; }

        /// <summary>
        /// Талевый блок. Мин положение, м
        /// </summary>
        public float? BlockPositionMin { get; set; }

        /// <summary>
        /// Талевый блок. Макс положение, м
        /// </summary>
        public float? BlockPositionMax { get; set; }

        /// <summary>
        /// Талевый блок. Скорость, м/час
        /// </summary>
        public float? BlockSpeed { get; set; }

        /// <summary>
        /// Талевый блок. Задание скорости, м/час
        /// </summary>
        public float? BlockSpeedSp { get; set; }

        /// <summary>
        /// Талевый блок. Задание скорости для роторного бурения, м/час
        /// </summary>
        public float? BlockSpeedSpRotor { get; set; }

        /// <summary>
        /// Талевый блок. Задание скорости для режима слайда, м/час
        /// </summary>
        public float? BlockSpeedSpSlide { get; set; }

        /// <summary>
        /// Талевый блок. Задание скорости для проработки, м/час
        /// </summary>
        public float? BlockSpeedSpDevelop { get; set; }

        /// <summary>
        /// Давление, атм
        /// </summary>
        public float Pressure { get; set; }

        /// <summary>
        /// Давление при холостом ходе, атм
        /// </summary>
        public float? PressureIdle { get; set; }

        /// <summary>
        /// действующее задание давления, атм
        /// </summary>
        public float? PressureSp { get; set; }

        /// <summary>
        /// задание давления для роторного режима, атм
        /// </summary>
        public float? PressureSpRotor { get; set; }

        /// <summary>
        /// задание давления для режима слайда, атм
        /// </summary>
        public float? PressureSpSlide { get; set; }

        /// <summary>
        /// задание давления для проработки, атм
        /// </summary>
        public float? PressureSpDevelop { get; set; }

        /// <summary>
        /// ограничение макс перепада давления, атм
        /// </summary>
        public float? PressureDeltaLimitMax { get; set; }

        /// <summary>
        /// осевая нагрузка, т
        /// </summary>
        public float AxialLoad { get; set; }

        /// <summary>
        /// задание осевой нагрузки, т
        /// </summary>
        public float? AxialLoadSp { get; set; }

        /// <summary>
        /// ограничение макс. осевой нагрузки, т
        /// </summary>
        public float? AxialLoadLimitMax { get; set; }

        /// <summary>
        /// Вес на крюке, т
        /// </summary>
        public float HookWeight { get; set; }

        /// <summary>
        /// Вес на крюке на х.х., т
        /// </summary>
        public float? HookWeightIdle { get; set; }

        /// <summary>
        /// ограничение мин веса на крюке, т
        /// </summary>
        public float? HookWeightLimitMin { get; set; }

        /// <summary>
        /// ограничение макс веса на крюке, т
        /// </summary>
        public float? HookWeightLimitMax { get; set; }

        /// <summary>
        /// момент ротора, кН*м
        /// </summary>
        public float RotorTorque { get; set; }

        /// <summary>
        /// момент ротора на х.х., кН*м
        /// </summary>
        public float? RotorTorqueIdle { get; set; }

        /// <summary>
        /// задание момента ротора, кН*м
        /// </summary>
        public float? RotorTorqueSp { get; set; }

        /// <summary>
        /// ограничение момента ротора, кН*м
        /// </summary>
        public float? RotorTorqueLimitMax { get; set; }

        /// <summary>
        /// скорость ротора, об/мин
        /// </summary>
        public float RotorSpeed { get; set; }

        /// <summary>
        /// расход, л/с
        /// </summary>
        public float? Flow { get; set; }

        /// <summary>
        /// расход на х.х., л/с
        /// </summary>
        public float? FlowIdle { get; set; }

        /// <summary>
        /// ограничение макс расхода, л/с
        /// </summary>
        public float? FlowDeltaLimitMax { get; set; }

        /// <summary>
        /// id текущего критерия бурения
        /// </summary>
        public short? IdFeedRegulator { get; set; }

        /// <summary>
        /// Текущее состояние работы MSE
        /// </summary>
        public short? MseState { get; set; }

        /// <summary>
        /// MSE
        /// </summary>
        public float? Mse { get; set; }

        /// <summary>
        /// Расход. Буровой насос 1
        /// </summary>
        public float? Pump0Flow { get; set; }

        /// <summary>
        /// Расход. Буровой насос 2
        /// </summary>
        public float? Pump1Flow { get; set; }

        /// <summary>
        /// Расход. Буровой насос 3
        /// </summary>
        public float? Pump2Flow { get; set; }
    }
}