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

namespace PARR.Domain.Entities.JobGroupEntities
{
    [Table("GroupTypes", Schema = DatabaseSchemas.JobGroup)]
    [Comment("Таблица типов групп работ")]
    public class JobGroupType : IBaseEntity
    {
        [Key]
        public Guid Id { get; set; }

        public DateTimeOffset DateCreated { get; set; }

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

        public required JobGroupTypesEnum Code { get; set; }

        public required string Name { get; set; }

        public required string Description { get; set; }

        /// <summary>
        /// Разрешить Job фильтры. Влияет только на интерфейс.
        /// Мэтчер собирает все фильтры из группы и работ всегда.
        /// </summary>
        [Comment("Разрешить Job фильтры. Влияет только на интерфейс. Мэтчер собирает все фильтры из группы и работ всегда.")]
        public bool IsAllowJobUnitFilter { get; set; }

        /// <summary>
        /// Автоконтролем управляет JobGroup? true - да JobGroup, false - Job.
        /// Влияет на интерфейс и на логику работы автоконтроля.
        /// Если true - то в GUI, кнопку синхронизировать можно нажать только в группах.
        /// </summary>
        [Comment("Автоконтролем управляет JobGroup? true - да JobGroup, false - Job. Влияет на интерфейс и на логику работы автоконтроля.")]
        public bool IsJobGroupAutoControl { get; set; } = false;

        /// <summary>
        /// Разрешена настройка кол-ва связей
        /// </summary>
        [Comment("Разрешена настройка кол-ва связей")]
        public bool IsRelationshipsAllowed { get; set; } = false;

        public ICollection<JobGroup> JobGroups { get; set; } = new HashSet<JobGroup>();
    }
}
