using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using AsbCloudApp.Data.DailyReport.Blocks;
using AsbCloudApp.Data.DailyReport.Blocks.Sign;
using AsbCloudApp.Data.DailyReport.Blocks.Subsystems;
using AsbCloudApp.Data.DailyReport.Blocks.TimeBalance;
using AsbCloudApp.Data.DailyReport.Blocks.WellOperation;

namespace AsbCloudApp.Data.DailyReport;

/// <summary>
/// Суточный отчёт
/// </summary>
public class DailyReportDto : IId,
   IWellRelated
{
   /// <inheritdoc/>
   [Required]
   public int Id { get; set; }

   /// <inheritdoc/>
   [Required]
   public int IdWell { get; set; }

    /// <summary>
    /// Название скважины
    /// </summary>
    [Required]
    public string WellCaption { get; set; } = null!;

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

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

   /// <summary>
   /// Заказчик
   /// </summary>
   public string? Customer { get; set; }

   /// <summary>
   /// Подрядчик
   /// </summary>
   public string? Contractor { get; set; }

   /// <summary>
   /// Месторождение
   /// </summary>
   public string? Deposit { get; set; }

   /// <summary>
   /// Глубина забоя на дату начала интервала
   /// </summary>
   public double? DepthStart { get; set; }

   /// <summary>
   /// Глубина забоя на дату окончания интервала
   /// </summary>
   public double? DepthEnd { get; set; }

    /// <summary>
    /// Дата формирования отчёта
    /// </summary>
    [Required]
    public DateOnly Date { get; set; }
   
   /// <summary>
   /// Дата последнего обновления
   /// </summary>
   public DateTimeOffset? DateLastUpdate { get; set; }

    /// <summary>
    /// Блок фактической траектории
    /// </summary>
    [Required]
    public TrajectoryBlockDto TrajectoryBlock { get; set; } = null!;

    /// <summary>
    /// Фактические операции
    /// </summary>
    [Required]
    public WellOperationBlockDto FactWellOperationBlock { get; set; } = null!;

   /// <summary>
   /// Баланс времени
   /// </summary>
   public TimeBalanceBlockDto? TimeBalanceBlock { get; set; }

   /// <summary>
   /// Наработка подсистем
   /// </summary>
   public SubsystemBlockDto? SubsystemBlock { get; set; }

   /// <summary>
   /// Подпись
   /// </summary>
   public SignBlockDto? SignBlock { get; set; }

    /// <summary>
    /// Блок расписания
    /// </summary>
    [Required]
    public IEnumerable<ScheduleRecordDto> ScheduleBlock { get; set; } = Enumerable.Empty<ScheduleRecordDto>();

    /// <summary>
    /// РТК
    /// </summary>
    [Required]
    public IEnumerable<ProcessMapWellDrillingRecordDto> ProcessMapWellDrillingBlock { get; set; } = Enumerable.Empty<ProcessMapWellDrillingRecordDto>();
}