using System;
using System.Collections.Generic;

namespace AsbCloudApp.Requests
{
    /// <summary>
    /// параметры для запроса списка операций
    /// </summary>
    public class WellOperationRequestBase: RequestBase
    {
        /// <summary>
        /// фильтр по дате начала операции
        /// </summary>
        public DateTime? GeDate { get; set; }

        /// <summary>
        /// фильтр по дате окончания операции
        /// </summary>
        public DateTime? LtDate { get; set; }

        /// <summary>
        /// фильтр. Больше или равно глубины скважины на начало операции. 
        /// </summary>
        public double? GeDepth { get; set; }

        /// <summary>
        /// фильтр. Меньше или равно глубины скважины на конец операции.
        /// </summary>
        public double? LeDepth { get; set; }

        /// <summary>
        /// фильтр по списку id категорий операции
        /// </summary>
        public IEnumerable<int>? OperationCategoryIds { get; set; }

        /// <summary>
        /// фильтр по план = 0, факт = 1
        /// </summary>
        public int? OperationType { get; set; }

        /// <summary>
        /// фильтр по списку id конструкций секции
        /// </summary>
        public IEnumerable<int>? SectionTypeIds { get; set; }
    }

    /// <summary>
    /// Параметры для запроса списка операций (с id скважины)
    /// </summary>
    public class WellOperationRequest: WellOperationRequestBase
    {
        /// <summary>
        /// id скважины
        /// </summary>
        public int IdWell { get; set; }

        /// <summary>
        /// ctor
        /// </summary>
        public WellOperationRequest(){}

        /// <summary>
        /// копирующий конструктор
        /// </summary>
        /// <param name="request"></param>
        /// <param name="idWell"></param>
        public WellOperationRequest(WellOperationRequestBase request, int idWell)
        {
            this.IdWell = idWell;

            this.GeDepth = request.GeDepth;
            this.LeDepth = request.LeDepth;
            this.GeDate = request.GeDate;
            this.LtDate = request.LtDate;
            
            this.OperationCategoryIds = request.OperationCategoryIds;
            this.OperationType = request.OperationType;
            this.SectionTypeIds = request.SectionTypeIds;

            this.Skip= request.Skip;
            this.Take= request.Take;
            this.SortFields = request.SortFields;
        }
    }
}