@tool
class_name pribor_rtr extends 'res://scenes/контроль/прибор.gd'

@export var prefix_path: String = 'DeviceDescription[DeviceName]'

static var json_conv: JSON = JSON.new()
static var node_maper = load('res://scenes/контроль/node-maper.gd')


const bort_to_node_name = {
    'Устройство БПО левого борта':  'grid_bpo_a1',
    'Устройство БПО правого борта': 'grid_bpo_a2'}


func _on_request_completed(result, _response_code, headers, body: PackedByteArray):
    if result != 0:
        var rs = $request.get_result_string(result)
        push_error('\"%s\"' % rs)
        return

    var json_str: = body.get_string_from_utf8()
    if not json_str:
        push_error('не удаётся получить строку из utf8-данных (%s)' % headers)
        return

    var rc: = json_conv.parse(json_str)
    if rc != Error.OK:
        var err = json_conv.get_error_message()
        push_error('разбор json прерван - \"%s\" (%s)' % [err, headers])
        return

    var pp: = []
    tools.map_solid_to_array(prefix_path, pp)
    var ret_val = [null, false, 0]
    var pp_copy = pp.duplicate(true)
    tools.get_value_by_path(json_conv.data, pp, ret_val)
    if not ret_val[1]:
        push_error('путь %s не найден (%s)' % [pp_copy, ret_val[2]])
        return

    if not bort_to_node_name.has(ret_val[0]):
        push_error('не известное устройство: \"%s\"' % ret_val[0])
        return

    var node_name = bort_to_node_name[ret_val[0]]
    var bort_node = get_node(node_name)

    for item in bort_node.get_children():
        node_maper.map_value_to_item(json_conv.data, item, 'state')

    var items = get_tree().get_nodes_in_group('управляется-по-шине-1')
    for node in items:
        if node.state == 1:
            $yas_bpo_a1.state = 1
            break
    items = get_tree().get_nodes_in_group('управляется-по-шине-2')
    for node in items:
        if node.state == 1:
            $yas_bpo_a2.state = 1
            break
    items = get_tree().get_nodes_in_group('потребитель-питания')
    for node in items:
        if node.state == 1:
            $mod_pit_g1.state = 1
            break
