using System;
using System.ComponentModel.DataAnnotations;

namespace AsbCloudApp.Data.SAUB
{
    /// <summary>
    /// телеметрия спин мастер
    /// </summary>
    public class TelemetryDataSpinDto : ITelemetryData
    {
        /// <summary>
        /// Идентификатор телеметрии
        /// </summary>
        public int IdTelemetry { get; set; }

        /// <summary>
        /// Дата
        /// </summary>
        [Required]
        public DateTime DateTime { get; set; }

        /// <summary>
        /// Ограничение числа оборотов вправо
        /// </summary>
        public float? RevolsRightLimit { get; set; }

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

        /// <summary>
        /// Заданная скорость вращения вправо
        /// </summary>
        public float? SpeedRightSp { get; set; }

        /// <summary>
        /// Заданная скорость вращения влево
        /// </summary>
        public float? SpeedLeftSp { get; set; }

        /// <summary>
        /// Суммарное количество оборотов вправо
        /// </summary>
        public float? RevolsRightTotal { get; set; }

        /// <summary>
        /// Суммарное количество оборотов влево
        /// </summary>
        public float? RevolsLeftTotal { get; set; }

        /// <summary>
        /// Нулевая позиция осцилляции
        /// </summary>
        public float? PositionZero { get; set; }

        /// <summary>
        /// Крайний правый угол осцилляции
        /// </summary>
        public float? PositionRight { get; set; }

        /// <summary>
        /// Выбранный режим управления
        /// </summary>
        public short? Mode { get; set; }

        /// <summary>
        /// Переменная этапа
        /// </summary>
        public short? State { get; set; }

        /// <summary>
        /// Осцилляция включена
        /// </summary>
        [Required]
        public bool IsOscillating => State != 0 & State != 6 & State != 7;

        /// <summary>
        /// Демпфирование включено
        /// </summary>
        [Required]
        public bool IsDampening => State == 7 && (Mode & 2) > 0;
    }
}