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>();
}