using Microsoft.EntityFrameworkCore;
using PARR.Domain.Entities.Base;
using System.ComponentModel.DataAnnotations.Schema;

namespace PARR.Domain.Entities
{
    [Table("RobotHistories")]
    [Index(nameof(HistoryLevel), nameof(DateCreated), IsDescending = new[] { false, true })]
    [Index(nameof(RobotConfigurationId), nameof(DateCreated))]
    [Index(nameof(DateCreated))]
    public class RobotHistory : IBaseEntity
    {
        public Guid Id { get; set; }

        public DateTimeOffset DateCreated { get; set; }

        [NotMapped]
        public DateTimeOffset? DateModified { get; set; }

        public int HistoryLevel { get; set; }

        public string? RobotMessage { get; set; }

        public string? EsppMessage { get; set; }

        /// <summary>
        /// Статус. Что нужно было сделать роботу
        /// </summary>
        public int TaskStatusCode { get; set; }

        public Guid RobotConfigurationId { get; set; }

        /// <summary>
        /// IP адрес робота
        /// </summary>
        public string? RobotIp { get; set; }

        ///// <summary>
        ///// Уникальный идентификатор серии выполнения, нужен для сопоставления истории
        ///// </summary>
        //public Guid IdSeries { get; set; }

        /// <summary>
        /// Идентификатор робота. 
        /// Форматы: H20-R1-T, H20-R1-S, H20-R1-ET, H20-R1-ES
        /// </summary>
        [Comment("Идентификатор робота. Форматы: H20-R1-T, H20-R1-S, H20-R1-ET, H20-R1-ES.")]
        public string? RobotId { get; set; }


        [ForeignKey(nameof(HistoryLevel))]
        public RobotHistoryLevel? RobotHistoryLevel { get; set; }

        [ForeignKey(nameof(RobotConfigurationId))]
        public RobotConfiguration? RobotConfiguration { get; set; }

        [ForeignKey(nameof(TaskStatusCode))]
        public TaskStatus? StatusTask { get; set; }
    }
}
