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>
        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 DateTime? StartDate { get; set; }

        /// <summary>
        /// Дата/время кода приходили данные последний раз
        /// </summary>
        public DateTime 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>();
    }
}