using System;
using System.ComponentModel.DataAnnotations;

namespace AsbCloudApp.Data.ProcessMap
{
    /// <summary>
    /// РТК
    /// </summary>    
    public class ProcessMapPlanDto : IId, IWellRelated
    {
        /// <inheritdoc/>
        public int Id { get; set; }

        /// <inheritdoc/>
        [Range(1, int.MaxValue, ErrorMessage = "Id скважины не может быть меньше 1")]
        public int IdWell { get; set; }

        /// <summary>
        /// Id пользователя, поле заполнять не нужно, подставляется автоматически
        /// </summary>
        public int? IdUser { get; set; }

        /// <summary>
        /// Id режима 1-ротор, 2 - слайд
        /// </summary>        
        [Range(0, 2, ErrorMessage = "Id режима должен быть либо 0-ручной либо, 1-ротор либо 2-слайд")]
        public int IdMode { get; set; }

        /// <summary>
        /// Тип секции
        /// </summary>
        public int IdWellSectionType { get; set; }

        /// <summary>
        /// Дата последнего изменения
        /// </summary>
        public DateTimeOffset LastUpdate { get; set; }

        /// <summary>
        /// Стартовая глубина
        /// </summary>
        [Range(0, 50000, ErrorMessage = "Глубина не может быть отрицательной")]
        public double DepthStart { get; set; }

        /// <summary>
        /// Глубина окончания интервала
        /// </summary>
        [Range(0, 50000, ErrorMessage = "Глубина не может быть отрицательной")]
        public double DepthEnd { get; set; }

        /// <summary>
        /// Нагрузка
        /// </summary>
        public PlanLimitDto AxialLoad { get; set; } = null!;

        /// <summary>
        /// Перепад давления
        /// </summary>
        public PlanLimitDto Pressure { get; set; } = null!;

        /// <summary>
        /// Момент на ВСП
        /// </summary>
        public PlanLimitDto TopDriveTorque { get; set; } = null!;

        /// <summary>
        /// Обороты на ВСП
        /// </summary>
        public PlanLimitDto TopDriveSpeed { get; set; } = null!;

        /// <summary>
        /// Расход
        /// </summary>
        public PlanLimitDto Flow { get; set; } = null!;

        /// <summary>
        /// Плановая механическая скорость, м/ч
        /// </summary>
        public double RopPlan { get; set; }

        /// <summary>
        /// Плановый процент использования АКБ
        /// </summary>
        public double UsageSaub { get; set; }

        /// <summary>
        /// Плановый процент использования spin master
        /// </summary>
        public double UsageSpin { get; set; }
    }
}