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

namespace PARR.Domain.Entities.Unit
{
    /// <summary>
    /// Справочник полей ЭК (компонентный состав, ответствтвенные, любые поля)
    /// </summary>
    [Table("Fields", Schema = DatabaseSchemas.Unit)]
    [Comment("Справочник полей ЭК")]
    [Index(nameof(AihitName))]
    [Index(nameof(EsppName))]
    public class UnitField : IBaseEntity
    {
        [Key]
        public Guid Id { get; set; }

        public DateTimeOffset DateCreated { get; set; }

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



        /// <summary>
        /// Имя поля в АИХ ИТ, заполняется при синхронизации
        /// </summary>
        public required string AihitName { get; set; }

        /// <summary>
        /// Название поля в ЕСПП, возможно в дальнейшем для синхронизации
        /// </summary>
        public string? EsppName { get; set; }

        /// <summary>
        /// Название поля для отображения в ГУИ
        /// </summary>
        public string? DisplayName { get; set; }

        /// <summary>
        /// Код поля, используется в GUI
        /// </summary>
        public string? Code { get; set; }

        /// <summary>
        /// Могут ли принимать несколько значений. Из АИХ ИТ приходят значения разделённые запятой
        /// </summary>
        public bool? IsMultipleValue { get; set; }

        public ICollection<UnitInValue> UnitInValues { get; set; } = new HashSet<UnitInValue>();


        public ICollection<UnitFieldInUnitFieldValue> UnitFieldValues { get; set; } = new HashSet<UnitFieldInUnitFieldValue>();

        public ICollection<JobRelationshipFilter> RelationshipFilters { get; set; } = new HashSet<JobRelationshipFilter>();


        /// <summary>
        /// JobGroup которые группируются по этому полю (!!!отключено каскадное удаление!!!)
        /// </summary>
        public ICollection<JobGroup> JobGroupWithGrouping { get; set; } = new HashSet<JobGroup>();
    }
}
