import json

# A bejövő adatok az n8n-től. A $items() függvénnyel hivatkozunk
# a korábbi node-okra a nevük alapján.
# Cseréld le a 'MySQL_Node_Neve' és 'Élő_Adat_Node_Neve' neveket
# a te munkafolyamatodban lévő node-ok tényleges nevére!
# Például:
# db_clients_items = $items("MySQL Client Fetch")
# live_clients_items = $items("Code (IP Scan Script)")

# Fontos: Ha az n8n Code node-jában futtatod, a $items funkciót közvetlenül használhatod.
# Ha külső szkriptként futtatod az "Execute Command" node-ból, akkor a bemenetet
# másképp kell kezelni (pl. parancssori argumentumként JSON stringet).
# Ez a kód az n8n Code node Python módjához készült.

db_clients_items = $items("MySQL_Node_Neve") # Ezt cseréld a MySQL node-od nevére
live_clients_items = $items("Élő_Adat_Node_Neve") # Ezt cseréld az élő adatokat adó Code node-od nevére


# Hozzuk létre a MAC cím alapján kereshető adathalmazokat
# Ellenőrizzük, hogy a bemeneti lista nem üres-e
db_clients = {}
if db_clients_items:
    db_clients = {item.json['mac_address']: item.json for item in db_clients_items}

live_clients = {}
if live_clients_items:
    live_clients = {item.json['mac_address']: item.json for item in live_clients_items}


differences = []

# 1. Új kliensek keresése (amik az élő adatokban vannak, de a DB-ben nem)
for mac, client_data in live_clients.items():
    if mac not in db_clients:
        differences.append({
            "change_type": "ÚJ KLIENS",
            "client": client_data
        })

# 2. Eltávolított kliensek keresése (amik a DB-ben vannak, de az élő adatokban már nem)
for mac, client_data in db_clients.items():
    if mac not in live_clients:
        differences.append({
            "change_type": "ELTÁVOLÍTOTT KLIENS",
            "client": client_data
        })

# 3. Változások keresése (pl. megváltozott az IP címe)
# Ez egy egyszerűbb példa, ami csak az IP-t figyeli.
# Ha több mezőt is figyelni akarsz, bővítsd ezt a részt.
for mac, live_data in live_clients.items():
    if mac in db_clients:
        db_data = db_clients[mac]
        # Összehasonlítjuk az IP címet és a switch nevét
        if live_data.get('ip_address') != db_data.get('ip_address') or \
           live_data.get('switch_name') != db_data.get('switch_name') or \
           live_data.get('interface') != db_data.get('interface') or \
           live_data.get('vlan') != db_data.get('vlan'):
            
            # Gyűjtsük össze a változásokat
            changes = {}
            if live_data.get('ip_address') != db_data.get('ip_address'):
                changes['ip_address'] = {'from': db_data.get('ip_address'), 'to': live_data.get('ip_address')}
            if live_data.get('switch_name') != db_data.get('switch_name'):
                changes['switch_name'] = {'from': db_data.get('switch_name'), 'to': live_data.get('switch_name')}
            if live_data.get('interface') != db_data.get('interface'):
                changes['interface'] = {'from': db_data.get('interface'), 'to': live_data.get('interface')}
            if live_data.get('vlan') != db_data.get('vlan'):
                changes['vlan'] = {'from': db_data.get('vlan'), 'to': live_data.get('vlan')}

            differences.append({
                "change_type": "MEGVÁLTOZOTT KLIENS",
                "client_mac": mac,
                "changes": changes,
                "current_data": live_data
            })

# A 'return' paranccsal adjuk vissza a különbségeket.
# Ha a 'differences' lista üres, a workflow ezen az ágon megáll (ha nincsenek további node-ok,
# amik üres bemenettel is futnak).
return differences
