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 DateTimeOffset UploadDate { get; set; } = DateTimeOffset.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; }
}