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>
    [Required]
    public int IdUserAtStart { get; set; }
    
    /// <summary>
    /// Пользователь панели оператора
    /// </summary>
    public string? TelemetryUserName { 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 int EnabledSubsystems { get; set; }

    /// <summary>
    /// название/описание операции
    /// </summary>
    [Required]
    public WellOperationCategoryDto OperationCategory { get; set; } = null!;

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

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