using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using AsbCloudDb.Model.ProcessMapPlan;
using Microsoft.EntityFrameworkCore;

namespace AsbCloudDb.Model.ProcessMapPlan.Operations;

[Table("t_process_map_plan_positioning_off_the_bottom"), Comment("Позиционирование над забоем")]
public class ProcessMapPlanPositioningOffTheBottom : ProcessMapPlanBase
{
    [Column("stop_off_the_bottom"), Comment("Остановка над забоем, м.")]
    [Range(0.0, 30.0)]
    [Required]
    public double StopOffTheBottom { get; set; }

    [Column("pressure_max"), Comment("Максимально допустимое давление, атм.")]
    [Range(0.0, 400.0)]
    [Required]
    public double PressureMax { get; set; }

    [Column("differential_pressure"), Comment("Перепад давления уставка, атм.")]
    [Range(0.0, 60.0)]
    [Required]
    public double DifferentialPressure { get; set; }

    [Column("tight"), Comment("Затяжка, т.")]
    [Range(0.0, 20.0)]
    [Required]
    public double Tight { get; set; }

    [Column("slacking_off"), Comment("Посадка, т.")]
    [Range(0.0, 20.0)]
    [Required]
    public double SlackingOff { get; set; }

    [Column("torque_max"), Comment("Максимально допустимый момент, кН*м.")]
    [Range(0.0, 35.0)]
    [Required]
    public double TorqueMax { get; set; }

    [Column("rop_up"), Comment("Скорость вверх, м/ч.")]
    [Range(0.0, 999.0)]
    [Required]
    public double RopUp { get; set; }

    [Column("rop_down"), Comment("Скорость вниз, м/ч.")]
    [Range(0.0, 999.0)]
    [Required]
    public double RopDown { get; set; }

    [Column("rpm_up"), Comment("Обороты вверх, об/мин.")]
    [Range(0.0, 270.0)]
    [Required]
    public double RpmUp { get; set; }

    [Column("rpm_down"), Comment("Обороты вниз, об/мин.")]
    [Range(0.0, 270.0)]
    [Required]
    public double RpmDown { get; set; }

    [Column("flow_rate_up"), Comment("Расход вверх, л/с.")]
    [Range(0.0, 100.0)]
    [Required]
    public double FlowRateUp { get; set; }

    [Column("flow_rate_down"), Comment("Расход вниз, л/с.")]
    [Range(0.0, 100.0)]
    [Required]
    public double FlowRateDown { get; set; }

    [Column("note"), Comment("Примечание"), StringLength(1024)]
    [Required]
    public string Note { get; set; } = string.Empty;

    [ForeignKey(nameof(IdPrevious))]
    public virtual ProcessMapPlanPositioningOffTheBottom? Previous { get; set; }
}