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

namespace AsbCloudApp.Data;

/// <summary>
/// базовая информация о скважине
/// </summary>
public class WellWithTimezoneDto : WellInfoDto
{
    /// <inheritdoc/>
    [Required]
    public SimpleTimezoneDto Timezone { get; set; } = null!;

    /// <summary>
    /// 0 - неизвестно,
    /// 1 - в работе,
    /// 2 - завершена
    /// </summary>
    [Required]
    public int IdState { get; set; }
}

/// <summary>
/// Скважина
/// </summary>
public class WellDto : WellInfoDto, IMapPoint, IId
{
    /// <inheritdoc/>        
    [Range(-90, 90, ErrorMessage = "Допустимые значения широты от -90 до 90")]
    public double? Latitude { get; set; }

    /// <inheritdoc/>
    [Range(-180, 180, ErrorMessage = "Допустимые значения долготы от -180 до 180")]
    public double? Longitude { get; set; }

    /// <inheritdoc/>
    [Required]
    public SimpleTimezoneDto Timezone { get; set; } = null!;

    /// <summary>
    /// Название типа скважины
    /// </summary>
    public string? WellType { get; set; }

    /// <summary>
    /// ID типа скважины
    /// </summary>
    [Range(1, 2, ErrorMessage = "Тип скважины указан неправильно.")]
    public int IdWellType { get; set; }

    /// <summary>
    /// ID куста
    /// </summary>
    public int IdCluster { get; set; }

    /// <summary>
    /// 0 - неизвестно,
    /// 1 - в работе,
    /// 2 - завершена
    /// </summary>
    [Range(0, 2, ErrorMessage = "Текущее состояние работы скважины указано неправильно.")]
    public int IdState { get; set; }

    /// <summary>
    /// Дата/время первой операции
    /// </summary>
    public DateTimeOffset? StartDate { get; set; }

    /// <summary>
    /// Дата/время кода приходили данные последний раз
    /// </summary>
    public DateTimeOffset LastTelemetryDate { get; set; }

    /// <summary>
    /// ID телеметрии
    /// </summary>
    public int? IdTelemetry { get; set; }

    /// <summary>
    /// Объект телеметрии (инфо от панели оператора)
    /// </summary>
    public TelemetryBaseDto? Telemetry { get; set; }

    /// <summary>
    /// Компании участвующие в работах на скважине
    /// </summary>
    public IEnumerable<CompanyDto> Companies { get; set; } = Enumerable.Empty<CompanyDto>();
}