using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;

namespace AsbCloudApp.Requests;

/// <summary>
/// Запрос на получение операций определенных по телеметрии
/// </summary>
public class DetectedOperationByTelemetryRequest : DetectedOperationRequest
{
    /// <summary>
    /// id телеметрии
    /// </summary>
    [Required] 
    public int IdTelemetry { get; set; }

    /// <summary>
    /// Запрос на получение операций определенных по id телеметрии
    /// </summary>
    public DetectedOperationByTelemetryRequest()
    {}

    /// <summary>
    /// Запрос на получение операций определенных по id телеметрии. Copy
    /// </summary>
    /// <param name="idTelemetry"></param>
    /// <param name="request"></param>
    public DetectedOperationByTelemetryRequest(int idTelemetry, DetectedOperationRequest request)
        :base(request)
    {
        IdTelemetry = idTelemetry;
    }
}

/// <summary>
/// Запрос на получение операций определенных по id скважины
/// </summary>
public class DetectedOperationByWellRequest : DetectedOperationRequest
{
    /// <summary>
    /// id скважины
    /// </summary>
    [Required] 
    public int IdWell { get; set; }

    /// <summary>
    /// Запрос на получение операций определенных по id скважины
    /// </summary>
    public DetectedOperationByWellRequest()
    {}

    /// <summary>
    /// Запрос на получение операций определенных по id скважины. Copy
    /// </summary>
    public DetectedOperationByWellRequest(int idWell, DetectedOperationRequest request)
        : base(request)
    {
        IdWell = idWell;
    }
}

/// <summary>
/// Запрос на получение операций определенных по телеметрии
/// </summary>
public class DetectedOperationRequest : RequestBase
{
    /// <summary>
    /// категории операций
    /// </summary>
    public IEnumerable<int> IdsCategories { get; set; }

    /// <summary>
    /// Больше или равно дате
    /// </summary>
    public DateTimeOffset? GeDateStart { get; set; }

    /// <summary>
    /// Меньше или равно дате
    /// </summary>
    public DateTimeOffset? LeDateEnd { get; set; }

    /// <summary>
    /// Больше или равно глубины забоя
    /// </summary>
    public double? GeDepthStart { get; set; }

    /// <summary>
    /// Меньше или равно глубины забоя
    /// </summary>
    public double? LeDepthEnd { get; set; }

    /// <summary>
    /// Запрос на получение операций определенных по телеметрии
    /// </summary>
    public DetectedOperationRequest()
    {
        IdsCategories = new List<int>();
    }

    /// <summary>
    /// Запрос на получение операций определенных по телеметрии. Copy
    /// </summary>
    /// <param name="request"></param>
    public DetectedOperationRequest(DetectedOperationRequest request)
        : base(request)
    {
        IdsCategories = request.IdsCategories;
        GeDateStart = request.GeDateStart;
        LeDateEnd = request.LeDateEnd;
        GeDepthStart = request.GeDepthStart;
        LeDepthEnd = request.LeDepthEnd;
    }
}