using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;

namespace AsbCloudApp.Data.ProcessMaps;

/// <summary>
/// РТК план проработка скважины
/// </summary>
public class ProcessMapPlanWellReamDto : ProcessMapPlanBaseDto, IValidatableObject
{
    /// <summary>
    /// Количество повторений
    /// </summary>
    [Range(0, 100, ErrorMessage = "Количество повторений должно быть в пределах от 0 до 100")]
    public double Repeats { get; set; }

    /// <summary>
    /// Вращение при движении вверх, об/мин
    /// </summary>
    [Range(0, 99999.9, ErrorMessage = "Количество вращений вверх должно быть в пределах от 0 до 99999.9")]
    public double SpinUpward { get; set; }

    /// <summary>
    /// Вращение при движении вниз, об/мин
    /// </summary>
    [Range(0, 99999.9, ErrorMessage = "Количество вращений вниз должно быть в пределах от 0 до 99999.9")]
    public double SpinDownward { get; set; }

    /// <summary>
    /// Скорость подъёма, м/ч
    /// </summary>
    [Range(0, 99999.9, ErrorMessage = "Скорость подъёма должна быть в пределах от 0 до 99999.9")]
    public double SpeedUpward { get; set; }

    /// <summary>
    /// Скорость спуска, м/ч
    /// </summary>
    [Range(0, 99999.9, ErrorMessage = "Скорость спуска должна быть в пределах от 0 до 99999.9")]
    public double SpeedDownward { get; set; }

    /// <summary>
    /// Уставка зятяжки, т
    /// </summary>
    [Range(0, 99999.9, ErrorMessage = "Значение затяжек уставки должно быть в пределах от 0 до 99999.9")]
    public double SetpointDrag { get; set; }

    /// <summary>
    /// Уставка посадки, т
    /// </summary>
    [Range(0, 99999.9, ErrorMessage = "Значение посадки уставки должно быть в пределах от 0 до 99999.9")]
    public double SetpointTight { get; set; }

    /// <summary>
    /// Давление, атм
    /// </summary>
    [Range(0, 99999.9, ErrorMessage = "Давление должно быть в пределах от 0 до 99999.9")]
    public double Pressure { get; set; }

    /// <summary>
    /// Момент, кН*м
    /// </summary>
    [Range(0, 99999.9, ErrorMessage = "Крутящий момент должен быть в пределах от 0 до 99999.9")]
    public double Torque { get; set; }

    /// <inheritdoc/>
    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (DepthEnd < DepthStart)
            yield return new ValidationResult(
                $"{nameof(DepthEnd)}:{DepthEnd:#0.0} меньше {nameof(DepthStart)}:{DepthStart:#0.0}",
                new[] { nameof(DepthEnd), nameof(DepthStart) });
    }
}