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

namespace AsbCloudApp.Data.ProcessMaps;

/// <inheritdoc/>
public abstract class ProcessMapPlanBaseDto : IId, IWellRelated, IValidatableObject
{
    /// <summary>
    /// Id скважины
    /// </summary>
    public int IdWell { get; set; }

    /// <summary>
    /// Id записи
    /// </summary>
    public int Id { get; set; }

    /// <summary>
    /// Тип секции
    /// </summary>
    [Range(1, int.MaxValue, ErrorMessage = "Id секции скважины не может быть меньше 1")]
    public int IdWellSectionType { get; set; }

    /// <summary>
    /// Название секции
    /// </summary>
    public string? Section { get; set; }

    /// <summary>
    /// Глубина по стволу от, м
    /// <para>
    /// на начало интервала
    /// </para>
    /// </summary>
    [Range(0, 99999.9, ErrorMessage = "Глубина не может быть отрицательной")]
    public double DepthStart { get; set; }

    /// <summary>
    /// Глубина по стволу до, м
    /// <para>
    /// на конец интервала
    /// </para>
    /// </summary>
    [Range(0, 99999.9, ErrorMessage = "Глубина не может быть отрицательной")]
    public double DepthEnd { get; set; }

    /// <inheritdoc/>
    public virtual IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (DepthEnd <= DepthStart)
            yield return new("Глубина окончания должна быть больше глубины начала", new string[] { nameof(DepthEnd) });
    }
}