using Microsoft.EntityFrameworkCore;
using System;
using System.ComponentModel.DataAnnotations.Schema;
using System.Text.Json.Serialization;

namespace AsbCloudDb.Model
{
    [Table("t_telemetry_data_spin"), Comment("набор основных данных по SpinMaster")]
    public class TelemetryDataSpin : ITelemetryData
    {
        [Column("id_telemetry")]
        public int IdTelemetry { get; set; }

        [Column("date", TypeName = "timestamp with time zone"), Comment("'2021-10-19 18:23:54+05'")]
        public DateTimeOffset DateTime { get; set; }

        [Column("revols_right_limit"), Comment("Ограничение числа оборотов вправо")]
        public float? RevolsRightLimit { get; set; }

        [Column("revols_left_limit"), Comment("Ограничение числа оборотов влево")]
        public float? RevolsLeftLimit { get; set; }

        [Column("speed_right_sp"), Comment("Заданная скорость вращения вправо")]
        public float? SpeedRightSp { get; set; }

        [Column("speed_left_sp"), Comment("Заданная скорость вращения влево")]
        public float? SpeedLeftSp { get; set; }

        [Column("revols_right_total"), Comment("Суммарное количество оборотов вправо")]
        public float? RevolsRightTotal { get; set; }

        [Column("revols_left_total"), Comment("Суммарное количество оборотов влево")]
        public float? RevolsLeftTotal { get; set; }

        [Column("position_zero"), Comment("Нулевая позиция осцилляции")]
        public float? PositionZero { get; set; }

        [Column("position_right"), Comment("Крайний правый угол осцилляции")]
        public float? PositionRight { get; set; }

        [Column("mode"), Comment("Выбранный режим управления")]
        public short? Mode { get; set; }

        [Column("state"), Comment("Переменная этапа")]
        public short? State { get; set; }

        [JsonIgnore]
        [ForeignKey(nameof(IdTelemetry))]
        [InverseProperty(nameof(Model.Telemetry.DataSpin))]
        public virtual Telemetry Telemetry { get; set; } = null!;
    }
}