using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using AsbCloudApp.Data.User;

namespace AsbCloudApp.Data.SAUB
{
    /// <summary>
    /// DTO запроса для предложения по изменению уставок на панели оператора
    /// </summary>
    public class SetpointsRequestDto : IId, IWellRelated
    {
        /// <inheritdoc/>
        [Required]
        public int Id { get; set; }

        /// <inheritdoc/>
        [Required]
        public int IdWell { get; set; }

        /// <summary>
        /// Id автора запроса
        /// </summary>
        [Required]
        public int IdAuthor { get; set; }

        /// <summary>
        /// текущее состояние запроса 0: неизвестно, 1:ожидает отправки, 2: отправлено, 3: принято оператором, 4: отклонено оператором, 5: устарело
        /// </summary>
        [Required]
        public int IdState { get; set; }

        /// <summary>
        /// отметка времени создания запроса
        /// </summary>
        public DateTime UploadDate { get; set; } = DateTime.Now;

        /// <summary>
        /// время в секундах актуальности этого запроса
        /// </summary>
        [Required]
        [Range(10 * 60, 4 * 60 * 60)]
        public int ObsolescenceSec { get; set; } = 10 * 60;

        /// <summary>
        /// набор уставок: {"название переменной панели"; "рекомендуемое значение"}
        /// </summary>
        [Required]
        public Dictionary<string, double> Setpoints { get; set; } = new();

        /// <summary>
        /// Комментарий для оператора панели
        /// </summary>
        public string? Comment { get; set; }

        /// <summary>
        /// DTO скважины
        /// </summary>
        public WellDto? Well { get; set; }

        /// <summary>
        /// DTO автора
        /// </summary>
        public UserDto? Author { get; set; }
    }
}