class_name scroll_params extends ScrollContainer

## Отображение параметров цели.

const CellLineEdit = preload('res://table/ячейка-2.tscn')  ## Ячейка таблицы.
const TableHeader  = preload('res://table/header.tscn')     ## Ячейка заголовок таблицы.


const TABLE_HEADER       = [ TableHeader,    TableHeader  ]  ## Описание ряда заголовка.
const TABLE_ROW          = [ CellLineEdit,   CellLineEdit ]  ## Описание ряда.
const TABLE_HEADERS_TEXT = ['Параметр',     'Значение'    ]  ## Назания колонок.
const TABLE_COLUMN_SIZE  = [ 370,            85           ]  ## Ширины колонок.


## Параметры цели для отображения в таблице.[br]
## [b]val[0][/b] - Индекс строки.[br][b]val[1][/b] - Содержание.
const TABLE_PARAMS       = {
    'baud':  [0, 'Модуляционная скорость, бод'],
    'freqm': [1, 'Режим смены частоты.'],
    'power': [2, 'Уровень сигнала, дБм.'],
    'tmod':  [3, 'Тип модуляции'],
    'width': [4, 'Занимая полоса частот, МГц.'],
    'rkrp':  [5, 'Рекомендуемая помеха'] }


## Обрабатывает сигнал [signal threats.threat_selected].
func on_threat_selected(th):
    $table.set_meta('id', th.id)
    on_threat_update(th)


func init_table():
    for i in TABLE_PARAMS.size(): $table.add_row(TABLE_ROW)
    for p in TABLE_PARAMS.values():
        $table.set_node_text(0, p[0], p[1])
        $table.set_node_alligment(0, p[0], HORIZONTAL_ALIGNMENT_LEFT)
        $table.set_node_editable(0, p[0], false)
        $table.set_node_editable(1, p[0], false)
    $table.set_columns_min_size(TABLE_COLUMN_SIZE)
    $table.set_meta('id', 0)


func _ready() -> void:
    signaller.connect('threat_selected', Callable(self, 'on_threat_selected'))
    signaller.connect('rto_threat_unsel', Callable(self, 'on_rto_threat_unsel'))
    threats.connect('threat_update',     Callable(self, 'on_threat_update'))
    call_deferred('init_table')


## Обрабатывает сигнал [signal threats.threat_update].
## Обновляет отображение только для выбранной цели.
func on_threat_update(th):
    if not th.selected: return
    if th.id != $table.get_meta('id'): return
    var mnms = tools.get_members_names(th)
    for member_name in mnms:
        if not TABLE_PARAMS.has(member_name): continue
        var p = TABLE_PARAMS[member_name]
        var val = th.get(member_name)
        $table.set_node_text(1, p[0], '%s' % val)


func on_rto_threat_unsel(_th_id):
    for item in TABLE_PARAMS.size():
        $table.set_node_text(1, item, '')
