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

namespace AsbCloudDb.Model
{
    [Table("t_drill_params"), Comment("Режим бурения в секции (диапазоны параметров бурения)")]
    public class DrillParams : IId
    {
        [Key]
        [Column("id")]
        public int Id { get; set; }

        [Column("well_id"), Comment("Id скважины")]
        public int IdWell { get; set; }
        
        [Column("depth_start"), Comment("Стартовая глубина")]
        public double DepthStart { get; set; }

        [Column("depth_end"), Comment("Глубина окончания интервала")]
        public double DepthEnd { get; set; }

        [Column("id_wellsection_type"), Comment("Id с типом секции скважины")]
        public int IdWellSectionType { get; set; }

        [Column("axial_load_min"), Comment("Минимальная нагрузка")]
        public double AxialLoadMin { get; set; }

        [Column("axial_load_avg"), Comment("Средняя нагрузка")]
        public double AxialLoadAvg { get; set; }

        [Column("axial_load_max"), Comment("Максимальная нагрузка")]
        public double AxialLoadMax { get; set; }

        [Column("pressure_min"), Comment("Минимальное давление")]
        public double PressureMin { get; set; }

        [Column("pressure_avg"), Comment("Среднее давление")]
        public double PressureAvg { get; set; }

        [Column("pressure_max"), Comment("Максимальное давление")]
        public double PressureMax { get; set; }

        [Column("rotor_torque_min"), Comment("Минимальный момент на ВСП")]
        public double RotorTorqueMin { get; set; }

        [Column("rotor_torque_avg"), Comment("Средний момент на ВСП")]
        public double RotorTorqueAvg { get; set; }

        [Column("rotor_torque_max"), Comment("Максимальный момент на ВСП")]
        public double RotorTorqueMax { get; set; }

        [Column("rotor_speed_min"), Comment("Минимальные обороты на ВСП")]
        public double RotorSpeedMin { get; set; }

        [Column("rotor_speed_avg"), Comment("Средние обороты на ВСП")]
        public double RotorSpeedAvg { get; set; }

        [Column("rotor_speed_max"), Comment("Максимальные обороты на ВСП")]
        public double RotorSpeedMax { get; set; }

        [Column("flow_min"), Comment("Минимальный расход")]
        public double FlowMin { get; set; }

        [Column("flow_avg"), Comment("Средний расход")]
        public double FlowAvg { get; set; }

        [Column("flow_max"), Comment("Максимальный расход")]
        public double FlowMax { get; set; }

        [JsonIgnore]
        [ForeignKey(nameof(IdWell))]
        public virtual Well Well { get; set; }

        [JsonIgnore]
        [ForeignKey(nameof(IdWellSectionType))]
        public virtual WellSectionType WellSectionType { get; set; }
    }
}