using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

#nullable disable

namespace AsbCloudDb.Model
{
    [Table("t_well"), Comment("скважины")]
    public partial class Well : IId, IMapPoint
    {
        [Key]
        [Column("id")]
        public int Id { get; set; }

        [Column("caption")]
        [StringLength(255)]
        public string Caption { get; set; }

        [Column("id_cluster")]
        public int? IdCluster { get; set; }

        [Column("id_telemetry")]
        public int? IdTelemetry { get; set; }

        [Column("id_well_type")]
        public int? IdWellType { get; set; }

        [Column("latitude")]
        public double? Latitude { get; set; }

        [Column("longitude")]
        public double? Longitude { get; set; }

        [Column("plan_start", TypeName = "timestamp with time zone")]
        public DateTime? PlanStart { get; set; }

        [Column("plan_end", TypeName = "timestamp with time zone")]
        public DateTime? PlanEnd { get; set; }

        [Column("fact_start", TypeName = "timestamp with time zone")]
        public DateTime? FactStart { get; set; }

        [Column("fact_end", TypeName = "timestamp with time zone")]
        public DateTime? FactEnd { get; set; }

        [Column("un_productive_time_days"), Comment("НПВ, сут")]
        public double? UnProductiveDays { get; set; }

        [Column("rate_of_penetration_plan"), Comment("МСП план")]
        public double? RateOfPenetrationPlan { get; set; }

        [Column("rate_of_penetration_fact"), Comment("МСП факт")]
        public double? RateOfPenetrationFact { get; set; }

        [Column("route_speed_plan"), Comment("Рейсовая скорость план")]
        public double? RouteSpeedPlan { get; set; }

        [Column("route_speed_fact"), Comment("Рейсовая скорость факт")]
        public double? RouteSpeedFact { get; set; }

        [ForeignKey(nameof(IdWellType))]
        [InverseProperty(nameof(Model.WellType.Wells))]
        public virtual WellType WellType { get; set; }

        [InverseProperty(nameof(WellSection.Well))]
        public virtual ICollection<WellSection> Sections { get; set; }

        [InverseProperty(nameof(RelationCompanyWell.Well))]
        public virtual ICollection<RelationCompanyWell> RelationCompaniesWells { get; set; }

        [ForeignKey(nameof(IdCluster))]
        [InverseProperty(nameof(Model.Cluster.Wells))]
        public virtual Cluster Cluster { get; set; }

        [ForeignKey(nameof(IdTelemetry))]
        [InverseProperty(nameof(Model.Telemetry.Well))]
        public virtual Telemetry Telemetry { get; set; }
    }
}