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

namespace PARR.Domain.Entities.Job
{
    [Table("Jobs", Schema = DatabaseSchemas.Job)]
    [Comment("Таблица видов работ")]
    public class Job : IBaseEntity
    {
        [Key]
        public Guid Id { get; set; }

        public DateTimeOffset DateCreated { get; set; }

        public DateTimeOffset? DateModified { get; set; }

        /// <summary>
        /// Наименование работ для интерфеса в ПАРР
        /// </summary>
        public required string Name { get; set; }

        /// <summary>
        /// Наименование работ для поля Работа в шаблоне АСУ ЕСПП, может быть динамическое
        /// </summary>
        public required string WorkName { get; set; }

        /// <summary>
        /// Минимальное значение дочерних или родительских связей группового ЭК
        /// </summary>
        public int? MinValueRelationships { get; set; }

        /// <summary>
        /// Максимальное значение дочерних или родительских связей группового ЭК
        /// </summary>
        public int? MaxValueRelationships { get; set; }

        /// <summary>
        /// Для подсчёта связей групового ЭК использовать родительсике или дочерние связи
        /// </summary>
        /// <value>
        /// true - диапазон связей относится к родительским связям<br/>
        /// false, null - диапазон относится к дочерним связям
        /// </value>
        public bool? IsParentRelationships { get; set; }

        /// <summary>
        /// Маска для динамического формирования имени шаблона 
        /// </summary>
        public required string TemplateNameMask { get; set; }

        /// <summary>
        /// Маска для динамического формирования рабочей группы исполнителей шаблона 
        /// </summary
        public required string WorkGroupMask { get; set; }

        /// <summary>
        /// Зона ответственности
        /// </summary>
        public required string ResponseAreaMask { get; set; }

        public Guid TnkId { get; set; }

        public Guid GroupId { get; set; }


        [ForeignKey(nameof(GroupId))]
        public JobGroup? Group { get; set; }

        [ForeignKey(nameof(TnkId))]
        public Tnk? Tnk { get; set; }


        public ICollection<JobUnitFilter> UnitFilters { get; set; } = new HashSet<JobUnitFilter>();

        public ICollection<Template> Templates { get; set; } = new HashSet<Template>();


        public JobAutoControl? AutoControl { get; set; }
    }
}
