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

namespace PARR.Domain.Entities
{
    [Table("RobotConfigurations")]
    [Index(nameof(TemplateId), nameof(RobotCode), IsUnique = true)]
    [Index(nameof(TemplateId), nameof(TaskStatusCode))]
    [Index(nameof(TemplateId), nameof(RobotStatusCode))]
    public class RobotConfiguration : IBaseEntity
    {
        [Key]
        public Guid Id { get; set; }

        public DateTimeOffset DateCreated { get; set; }

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

        public Guid TemplateId { get; set; }

        /// <summary>
        /// Идентификатор робота
        /// </summary>
        public int RobotCode { get; set; }

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

        /// <summary>
        /// Статус работы робота
        /// </summary>
        public int RobotStatusCode { get; set; }

        /// <summary>
        /// Количество попыток выполнения задания роботом
        /// </summary>
        public int AttemptsNumber { get; set; }

        /// <summary>
        /// Последняя дата обновления статуса RobotStatusCode роботом
        /// </summary>
        public DateTimeOffset? LastRobotStatusUpdated { get; set; }

        [ForeignKey(nameof(TemplateId))]
        public Template? Template { get; set; }

        [ForeignKey(nameof(RobotCode))]
        public Robot? Robot { get; set; }

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

        [ForeignKey(nameof(RobotStatusCode))]
        public RobotStatus? RobotStatus { get; set; }

        public ICollection<RobotHistory> RobotHistories { get; set; } = new HashSet<RobotHistory>();
    }
}
