extends Node
var UNICAST_PORT: int = 50100
var UNICAST_ADDRESS: String = '10.1.1.100'
const BROADCAST_PORT: int = 50000
const DEFAULT_ADDRESS: String = '10.1.1.11'
const DEFAULT_PORT: String = '50011'
const CONST_MIN_TEMP: int = -25
const MAXIMUM_CODE_ADC: int = 3796
const MINIMUM_CODE_AD: int = 2660
const TEMP: float =  115.0 / (MAXIMUM_CODE_ADC - MINIMUM_CODE_AD)
const PORT_FS = 1201
const TableNode = preload("res://table/node.tscn")
const TableList = preload("res://table/node_list.tscn")
const Switch = preload("res://table/switch.tscn")
const SocketStatus = preload("res://table/socket_status.tscn")
const Header = preload("res://table/header.tscn")
var EMS_G_PORT_DATA_HOLDER: Array = []
var CURRENT_MODE: int = ADDRESSES[0][3]
const SELECT_DEVICE: Array = [[TableNode, TableList]]
const ROWS_REGS_DATA: Array = [
                    [Header, Header],
                    [TableNode, TableNode],
                    [TableNode, TableNode],
                    [TableNode, TableNode],
                    [TableNode, TableNode],
                    [TableNode, TableNode],
                    [TableNode, TableNode]]
const ROWS_YAU_07B_1: Array = [
                    [Header, Header],
                    [TableNode, Switch],
                    [TableNode, TableList],
                    [TableNode, TableList],
                    [TableNode, TableList],
                    [TableNode, TableNode],
                    [TableNode, SocketStatus],
                    [TableNode, SocketStatus]]
const ROWS_YAU_07B_2: Array = [
                    [Header, Header],
                    [TableNode, Switch],
                    [TableNode, TableList],
                    [TableNode, TableList],
                    [TableNode, TableList],
                    [TableNode, Switch],
                    [TableNode, SocketStatus],
                    [TableNode, SocketStatus]]
const ROWS_FS: Array = [
                    [Header, Header, Header],
                    [TableNode, TableNode,      TableNode],
                    [TableNode, TableNode,      TableNode],
                    [TableNode, TableNode,      TableNode],
                    [TableNode, TableList,      TableNode],
                    [TableNode, Switch,         TableNode],
                    [TableNode, SocketStatus,   TableNode],
                    [TableNode, TableNode,      TableNode],
                    [TableNode, Switch,         TableNode],]
const ADDRESSES: Array = [
                    ['ПРД-Н1', '10.1.1.11', 50011, MODE.PRD_H, '10.1.2.18', '10.1.2.19', ''],
                    ['ПРД-Н2', '10.1.1.21', 50021, MODE.PRD_H, '10.1.2.34', '10.1.2.35', ''],
                    ['ПРД-Н3', '10.1.1.31', 50031, MODE.PRD_H, '10.1.2.50', '10.1.2.51', ''],
                    ['ПРД-Н4', '10.1.1.41', 50041, MODE.PRD_H, '10.1.2.66', '10.1.2.67', ''],
                    ['ПРД-В1', '10.1.1.12', 50012, MODE.PRD_B, '10.1.2.20', '10.1.2.21', ''],
                    ['ПРД-В2', '10.1.1.22', 50022, MODE.PRD_B, '10.1.2.36', '10.1.2.37', ''],
                    ['ПРД-В3', '10.1.1.32', 50032, MODE.PRD_B, '10.1.2.52', '10.1.2.53', ''],
                    ['ПРД-В4', '10.1.1.42', 50042, MODE.PRD_B, '10.1.2.68', '10.1.2.69', ''],
                    ['ПРД-К1', '10.1.1.13', 50013, MODE.PRD_K, '10.1.2.22', '10.1.2.23', '10.1.2.17'],
                    ['ПРД-К2', '10.1.1.23', 50023, MODE.PRD_K, '10.1.2.38', '10.1.2.39', '10.1.2.33'],
                    ['ПРД-К3', '10.1.1.33', 50033, MODE.PRD_K, '10.1.2.54', '10.1.2.55', '10.1.2.49'],
                    ['ПРД-К4', '10.1.1.43', 50043, MODE.PRD_K, '10.1.2.70', '10.1.2.71', '10.1.2.65']]
const INPUT_EMS_G: Array = [
                    '01 :34',
                    '02 :35',
                    '03 :36',
                    '04 :37',
                    '05 :38',
                    '06 :39',
                    '07 :40',
                    '08 :41',
                    '18 :34',
                    '19 :35',
                    '20 :36',
                    '21 :37',
                    '22 :38',
                    '23 :39',
                    '24 :40',
                    '25 :41',]
const OUT_EMS_G: Array = [
                    [47, '10 :43'],
                    [48, '11 :44'],
                    [49, '12 :45'],
                    [50, '13 :46'],
                    [51, '14 :47'],
                    [52, '15 :48'],
                    [53, '16 :49'],
                    [54, '17 :50'],
                    [55, '26 :43'],
                    [56, '27 :44'],
                    [57, '28 :45'],
                    [58, '29 :46'],
                    [59, '30 :47'],
                    [60, '31 :48'],
                    [61, '32 :49'],
                    [62, '33 :50'],
]
const OUT_x128: Array = [
        'Р',
        'К',
        'Откл',
        '1'
]
const RAY_DICT: Array = [
        '  -5°',
        '   5°',
        '  15°',
        '  25°',
        '  35°',
        '  45°',
        '  Контроль',
]
const ATT_DICT: Array = [
        '  0 dB',
        '  0.5 dB',
        '  2 dB',
        '  2.5 dB',
        '  8 dB',
        '  8.5 dB',
        '  10 dB',
        '  10.5 dB',
]
const ATT_DICT_correct: Array = [
        '  0 dB',
        '  1 dB',
        '  4 dB',
        '  5 dB',
        '  16 dB',
        '  17 dB',
        '  20 dB',
        '  21.5 dB',
]

const SIGNS: Dictionary = {
    MODE.PRD_H: [
        # ЯУ-07б-1
        'ПРД-Н',
        'Литера 2',
        'Запрет СИ 2',
        'Модуляция УМ',
        'Положение луча',
        'Аттенюатор УМ',
        '',
        'СИ 2 в УФ',
        'СЗИ 2 от УФ',

        # ЯУ-07б-2
        'ПРД-Н',
        'Литера 3',
        'Запрет СИ 3',
        'Модуляция УМ',
        'Положение луча',
        'Аттенюатор УМ',
        'ФГОЗ 3',
        'СИ 3 в УФ',
        'СЗИ 3 от УФ',

        # ФС-1
        'Модуль ФС',
        'Литера 2',
        'Состояние',
        'Частота',
        'Аттенюатор',
        'Модуляция',
        'Генератор ФС',
        'СИ 2 от ФС',
        'Фильтр CAN',
        'Статус CAN',

        # ФС-2
        'Модуль ФС',
        'Литера 3',
        'Состояние',
        'Частота',
        'Аттенюатор',
        'Модуляция',
        'Генератор ФС',
        'СИ 3 от ФС',
        'Фильтр CAN',
        'Статус CAN',
    ],
    MODE.PRD_B: [
        # ЯУ-07б-1
        'ПРД-В',
        'Литера 4',
        'Запрет СИ 4',
        'Модуляция УМ',
        'Положение луча',
        'Аттенюатор УМ',
        'ФГОЗ 4',
        'СИ 4 в УФ',
        'СЗИ 4 от УФ',

        # ЯУ-07б-2
        'ПРД-В',
        'Литера 5',
        'Запрет СИ 5',
        'Модуляция УМ',
        'Положение луча',
        'Аттенюатор УМ',
        'ФГОЗ 5',
        'СИ 5 в УФ',
        'СЗИ 5 от УФ',

        # ФС-1
        'Модуль ФС',
        'Литера 4',
        'Состояние',
        'Частота',
        'Аттенюатор',
        'Модуляция',
        'Генератор ФС',
        'СИ 4 от ФС',
        'Фильтр CAN',
        'Статус CAN',

        # ФС-2
        'Модуль ФС',
        'Литера 5',
        'Состояние',
        'Частота',
        'Аттенюатор',
        'Модуляция',
        'Генератор ФС',
        'СИ 5 от ФС',
        'Фильтр CAN',
        'Статус CAN',
    ],
    MODE.PRD_K: [
        # ЯУ-07б-1
        'ПРД-К',
        'Литера 6',
        'Запрет СИ 6',
        'Модуляция УМ',
        'Положение луча',
        'Аттенюатор УМ',
        'ФРЛС 6',
        'СИ 6 в УФ',
        'СЗИ 6 от УФ',

        # ЯУ-07б-2
        'ПРД-К',
        'Литера 7',
        'Запрет СИ 7',
        'Модуляция УМ',
        'Положение луча',
        'Аттенюатор УМ',
        '',
        'СИ 7 в УФ',
        'СЗИ 7 от УФ',

        # ФС-1
        'Модуль ФС',
        'Литера 6',
        'Состояние',
        'Частота',
        'Аттенюатор',
        'Модуляция',
        'Генератор ФС',
        'СИ 6 от ФС',
        'Фильтр CAN',
        'Статус CAN',

        # ФС-2
        'Модуль ФС',
        'Литера 7',
        'Состояние',
        'Частота',
        'Аттенюатор',
        'Модуляция',
        'Генератор ФС',
        'СИ 7 от ФС',
        'Фильтр CAN',
        'Статус CAN',

        # ЯУ-07б-2
        'ПРД-К',
        'Литера 1',
        'Запрет СИ 1',
        'Модуляция УМ',
        'Положение луча',
        'Аттенюатор УМ',
        '',
        'СИ 1 в УФ',
        'СЗИ 1 от УФ',

        # ФС-3
        'Модуль ФС',
        'Литера 1',
        'Состояние',
        'Частота',
        'Аттенюатор',
        'Модуляция',
        'Генератор ФС',
        'СИ 1 от ФС',
        'Фильтр CAN',
        'Статус CAN',
    ],
}

enum BASE_PORTS {
    UG    = 0x100,
    EMS_G = 0x120,
    UKP_1 = 0x130,
    UKP_2 = 0x140,
    }
enum MODE {
        PRD_H,
        PRD_B,
        PRD_K,
        }
enum Frame {
        WORK,      ## В работе
        CONSTANT,  ## Постоянный сигнал
        VARIABLE,  ## Переменный сигнал
        NULL,
        }
enum DataIndices {
        STATUS_BOARD = 0,
        IN_BLANK_PRD = 1,
        IN_IMPULS_PRD = 7,
        OUT_BLANK_PRD = 13,
        OUT_IMPULS_PRD = 19,
        DRY_CONTACT = 27,
        DKM = 28,
        POWER_UKP_1 = 31,
        TEMPERATURE_UKP_1 = 47,
        POWER_UKP_2 = 63,
        TEMPERATURE_UKP_2 = 79,
        }
enum STATE {
    WAIT,
    READ_ISA,
    WRITE_ISA,
    DONE,
    IDLE,
    SEND,
    }
enum STATE_VAL {
    NONE = 0,
    GOOD = 1,
    ERROR = 2
    }
enum GROUP {
    BASE = 0x00,
    GENERATOR = 0x03,
    RF = 0x06,
    }
enum CMD {
    START_SESSION = 0x0,
    READ_CARRIER = 0x1F,
    SET_CARRIER = 0x1E,
    READ_ATT = 0x1A,
    SET_ATT = 0x1B,
    READ_GEN_STATUS = 0x05,
    SET_GEN_STATUS = 0x06,
    BASE_GET_CURRENT_TEMP = 0x36,
    BASE_CAN_MACRO_READ = 0x33,
    }
enum META {
    CZI_1 = 1,
    CZI_2 = 2,
    CZI_3 = 3,
    CZI_4 = 4,
    CZI_5 = 5,
    CZI_6 = 6,
    CZI_7 = 7,
    CI_1_OT_FS = 9,
    CI_2_OT_FS = 10,
    CI_3_OT_FS = 11,
    CI_4_OT_FS = 12,
    CI_5_OT_FS = 13,
    CI_6_OT_FS = 14,
    CI_7_OT_FS = 15,
    CI_1_B_UF = 47,
    CI_2_B_UF = 48,
    CI_3_B_UF = 49,
    CI_4_B_UF = 48,
    CI_5_B_UF = 49,
    CI_6_B_UF = 48,
    CI_7_B_UF = 49,
    MODUL_UM_1 = 50,
    MODUL_UM_2 = 51,
    MODUL_UM_3 = 52,
    MODUL_UM_4 = 51,
    MODUL_UM_5 = 52,
    MODUL_UM_6 = 51,
    MODUL_UM_7 = 52,
    FGOZ_4 = 55,
    FGOZ_6 = 55,
    FGOZ_3 = 56,
    FGOZ_5 = 56,
    MODUL_UM_28 = 57,
}
enum FS_FREQ {
    f1 = 430,
    f2 = 932,
    f3 = 1137,
    f4 = 1300,
    f5 = 1725,
    f6 = 2750,
    f7 = 4750,
}

var FS_ATT: Dictionary = {
    "ПРД-Н1": [18, 18],
    "ПРД-Н2": [18, 18],
    "ПРД-Н3": [18, 18],
    "ПРД-Н4": [18, 18],
    "ПРД-В1": [19, 19],
    "ПРД-В2": [19, 19],
    "ПРД-В3": [19, 19],
    "ПРД-В4": [19, 19],
    "ПРД-К1": [17, 17, 17],
    "ПРД-К2": [17, 17, 17],
    "ПРД-К3": [17, 17, 17],
    "ПРД-К4": [17, 17, 17]
}


func _ready() -> void:
    # Считывание аргументов с консоли (путь сохранения)
    var args = OS.get_cmdline_user_args()
    for i in range(args.size()):
        if args[i] == "addr" and i + 1 < args.size():
            UNICAST_PORT = 50000 + int(args[i + 1])
            UNICAST_ADDRESS = '10.1.1.%s' % args[i + 1]
    read_file()


func read_file():
    var file_path = "user://saves/fs_setting"
    var dir_path = "user://saves"

    # Проверяем и создаем папку, если она не существует
    var dir = DirAccess.open(dir_path)
    if not dir:
        create_dir(dir_path)

    var file = FileAccess.open(file_path, FileAccess.READ)
    if file:
        # Файл существует, читаем его содержимое
        if file.get_length() > 0:
            FS_ATT = file.get_var()
        file.close()
    else:
        # Файл не существует, создаем его
        create_file(file_path)


func create_dir(dir_path: String):
    DirAccess.make_dir_absolute(dir_path)


func create_file(file_path: String):
    var file = FileAccess.open(file_path, FileAccess.WRITE)
    if file:
        file.close()
        print("Файл создан: ", file_path)
    else:
        print("Не удалось создать файл по пути:", file_path)
