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_tf_orientation"), Comment("Выставление")]
public class ProcessMapPlanTFOrientation : ProcessMapPlanBase
{
    [Column("tf_setpoint"), Comment("Задание TF, град.")]
    [Range(0.0, 360.0)]
    [Required]
    public double TFSetpoint { get; set; }

    [Column("spring"), Comment("Пружина, град.")]
    [Range(0.0, 10000.0)]
    [Required]
    public double Spring { 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("repetitions_count"), Comment("Количество расхаживаний, шт.")]
    [Range(0.0, 99.0)]
    [Required]
    public int RepetitionsCount { 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("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("interval"), Comment("Интервал расхаживания, м.")]
    [Range(0.0, 30.0)]
    [Required]
    public double Interval { get; set; }

    [Column("stop_point_off_bottom"), Comment("Остановка над забоем, м.")]
    [Range(0.0, 10.0)]
    [Required]
    public double StopPointOffBottom { get; set; }

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

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