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

namespace AsbCloudApp.Data.DetectedOperation;

/// <summary>
/// Автоматически определенная операция
/// </summary>
public class DetectedOperationDto : IId
{
   /// <inheritdoc/>    
   [Required]
   public int Id { get; set; }

   /// <summary>
   /// Id телеметрии
   /// </summary>
   [Required]
   public int IdTelemetry { get; set; }

   /// <summary>
   /// Id названия/описания операции
   /// </summary>
   [Required]
   public int IdCategory { get; set; }

   /// <summary>
   /// Id пользователя панели на момент начала операции
   /// </summary>
   public int? IdUserAtStart { get; set; }
   
   /// <summary>
   /// Id пользователя изменившего операцию
   /// </summary>
   public int? IdEditor { get; set; }

   /// <summary>
   /// Дата завершения операции в часовом поясе скважины
   /// </summary>
   [Required]
   public DateTimeOffset DateEnd { get; set; }

   /// <summary>
   /// Дата начала операции в часовом поясе скважины
   /// </summary>
   [Required]
   public DateTimeOffset DateStart { get; set; }

   /// <summary>
   /// глубина на завершения операции, м
   /// </summary>
   [Required]
   public double DepthEnd { get; set; }

   /// <summary>
   /// глубина на начало операции, м
   /// </summary>
   [Required]
   public double DepthStart { get; set; }

   /// <summary>
   /// Продолжительность операции в минутах
   /// </summary>
   [Required]
   public double DurationMinutes => (DateEnd - DateStart).TotalMinutes;
   
   /// <summary>
   /// название/описание операции
   /// </summary>
   [Required]
   public WellOperationCategoryDto OperationCategory { get; set; } = null!;
   
   /// <summary>
   /// Включенные подсистемы
   /// </summary>
   [Required]
   public EnabledSubsystems EnabledSubsystems { get; set; }

   /// <summary>
   /// Значение ключевой параметра операции
   /// </summary>
   [Required]
   public double Value { get; set; }

   /// <summary>
   /// Доп. инфо по операции
   /// </summary>
   public IDictionary<string, object> ExtraData { get; set; } = new Dictionary<string, object>();
}