using PARR.Domain.Common.Rabbit.Messages;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace PARR.AIHITMainLoader.Models
{
    internal class PtkData : IMainData
    {
        [Column("IP_АДРЕС")]
        public string? IP { get; set; }

        [Column("АКТИВЕН")]
        public string? IsActive { get; set; }

        [Column("ВАЖНЫЙ_ЭК")]
        public string? IsImportant { get; set; }

        [Column("ЗОНА_ОТВЕТСТВЕННОСТИ")]
        public string? ResponseArea { get; set; }

        [Column("КАТЕГОРИЯ_ЭК")]
        public string? EKCategory { get; set; }

        [Column("КОД_ПОИСКА_ЭК")]
        public string? EKFindCode { get; set; }

        [Column("КРАТКОЕ_НАИМЕНОВАНИЕ")]
        public string? ShortName { get; set; }

        [Column("ОТВЕТСТВЕННЫЙ_ЗА_ЭК")]
        public string? ResponsibleByEK { get; set; }

        [Column("ПОДКАТЕГОРИЯ_ЭК")]
        public string? EKSubCategory { get; set; }

        [Column("ПОЛНОЕ_НАИМЕНОВАНИЕ")]
        public string? FullName { get; set; }

        [Column("РАБОЧАЯ_ГР_ОТВ_ЗА_ЭК")]
        public string? WorkGroup { get; set; }

        [Column("РАСПОЛОЖЕНИЕ")]
        public string? Location { get; set; }

        [Column("СЕТЕВОЕ_ИМЯ")]
        public string? NetworkName { get; set; }

        [Column("СТАТУС")]
        public string? Status { get; set; }

        [Column("ТИП_ЭК")]
        public string? EKType { get; set; }

        [Column("НАПРАВЛЕНИЕ_ЦТС_ЦК")]
        public string? CTSDirection { get; set; }

        [Key]
        [Column("ID")]
        public int? AIHID { get; set; }

        [Column("РГ_смены")]
        public string? ShiftWorkGroup { get; set; }

        [Column("Клиентское_ПО")]
        public string? ClientSoftware { get; set; }

        [Column("Клиентская_ОС")]
        public string? ClientOS { get; set; }

        [Column("Тип СУБД")]
        public string? DBType { get; set; }

        [Column("Тип сервера приложений")]
        public string? APPType { get; set; }

        [Column("Тип сервера ЦК БС")]
        public string? CKBSServerType { get; set; }

        [Column("Тип сервера ИБ")]
        public string? IBServerType { get; set; }

        [Column("Тип сервера инфраструктуры")]
        public string? InfrastructureServerType { get; set; }

        [Column("Тип сервера мониторинга")]
        public string? MonitoringServerType { get; set; }

        [Column("ОС")]
        public string? OSType { get; set; }

        [Column("ЗО_РГ")]
        public string? WorkGroupResponseArea { get; set; }

        [Column("НЕУНИКАЛЬНЫЙ_ЭК")]
        public string? IsNotUnique { get; set; }

        [Column("Холодный резерв")]
        public int? ColdReserve { get; set; }

        [Column("ДОПОЛНИТЕЛЬНАЯ_ИНФОРМАЦИЯ")]
        public string? AdditionalInformation { get; set; }

        [Column("ПАРР тег")]
        public string? Tag { get; set; }

        [Column("Тип инфраструктурного сервиса")]
        public string? InfrastructureServiceType { get; set; }

        public AihitMainDataMq ToMainData()
        {
            return new AihitMainDataMq
            {
                Name = EKFindCode!,//TODO Ты прям уверен???
                Properties = new Dictionary<string, string?>
                {
                    {"IP_АДРЕС", IP },
                    {"АКТИВЕН", IsActive },
                    {"НЕУНИКАЛЬНЫЙ_ЭК", IsNotUnique },
                    //{"ВАЖНЫЙ_ЭК", IsImportant },
                    {"КАТЕГОРИЯ_ЭК", EKCategory },
                    {"КРАТКОЕ_НАИМЕНОВАНИЕ", ShortName },
                    {"ОТВЕТСТВЕННЫЙ_ЗА_ЭК", ResponsibleByEK },
                    {"ПОДКАТЕГОРИЯ_ЭК", EKSubCategory },
                    {"ПОЛНОЕ_НАИМЕНОВАНИЕ", FullName },
                    {"РАБОЧАЯ_ГР_ОТВ_ЗА_ЭК", WorkGroup },
                    //{"РАСПОЛОЖЕНИЕ", Location },
                    //{"СЕТЕВОЕ_ИМЯ", NetworkName },
                    {"СТАТУС", Status },
                    {"ТИП_ЭК", EKType },
                    //{"НАПРАВЛЕНИЕ_ЦТС_ЦК", CTSDirection },
                    //{"ID", AIHID.ToString() },
                    //{"РГ_смены", ShiftWorkGroup },
                    {"Клиентское_ПО", ClientSoftware },
                    {"Клиентская_ОС", ClientOS },
                    {"Тип СУБД", DBType },
                    {"Тип сервера приложений", APPType },
                    {"Тип сервера ЦК БС", CKBSServerType },
                    {"Тип сервера ИБ", IBServerType },
                    {"Тип сервера инфраструктуры", InfrastructureServerType },
                    {"Тип сервера мониторинга", MonitoringServerType },
                    {"ОС", OSType },
                    {"ЗО_РГ", WorkGroupResponseArea },
                    {"Холодный резерв", ColdReserve.ToString() },
                    {"ДОПОЛНИТЕЛЬНАЯ_ИНФОРМАЦИЯ", AdditionalInformation },
                    {"ПАРР тег", Tag },
                    {"Тип инфраструктурного сервиса", InfrastructureServiceType }, 
                }
            };
        }
    }
}
