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;
}