# -*- coding: utf-8 -*-
"""Diagnosztikai szkript (CSAK OLVAS, semmit nem módosít): megkeresi azokat a gépeket, amiknél
a terhelésfokozat (teher_class) valaha T2-ről vagy T3-ról T1-re változott ugyanabban a mentésben,
mint amikor a calculated_csoportszam is csökkent - ez az erős gyanújele annak, hogy a
2026-09-23 előtt élt "teher-class / teher_class" id-elírás hiba (l. commit 61675a9) csendben
elrontotta a gép terhelésfokozatát/csoportszámát egy szerkesztés-újramentés során, NEM a
felhasználó szándékos döntése volt.

Minden mezőváltozás generikusan bekerül az AuditLog táblába (routers/machines.py gep_mentese(),
"for col in gep.__table__.columns" ciklus) - ez teszi lehetővé ezt az utólagos vizsgálatot.

Futtatás: python ellenorzo_teherclass_regresszio.py
"""
from collections import defaultdict
from database import SessionLocal
import models

GYANUS_ATMENETEK = {("T2", "T1"), ("T3", "T1"), ("T3", "T2")}


def main():
    db = SessionLocal()

    logs = db.query(models.AuditLog).filter(
        models.AuditLog.field_name == "teher_class"
    ).order_by(models.AuditLog.machine_id, models.AuditLog.timestamp).all()

    if not logs:
        print("Nincs egyetlen 'teher_class' naplóbejegyzés sem - nincs mit vizsgálni.")
        db.close()
        return

    gyanus_talalatok = []
    for log in logs:
        if (log.old_value, log.new_value) in GYANUS_ATMENETEK:
            gyanus_talalatok.append(log)

    if not gyanus_talalatok:
        print(f"Átnézve {len(logs)} db 'teher_class' naplóbejegyzés - egyetlen gyanús (T2/T3 -> alacsonyabb) átmenet sem található.")
        db.close()
        return

    print(f"FIGYELEM - {len(gyanus_talalatok)} db gyanús terhelésfokozat-csökkenés található {len(logs)} db teher_class naplóbejegyzés között:\n")

    for log in gyanus_talalatok:
        gep = db.query(models.Machine).filter(models.Machine.id == log.machine_id).first()
        felhasznalo = db.query(models.User).filter(models.User.id == log.user_id).first()

        # Ugyanabban a mentésben (néhány másodperces ablakban) volt-e calculated_csoportszam
        # csökkenés is - ez tovább erősíti a gyanút (a puszta teher_class váltás önmagában
        # is lehet szándékos, de az EGYIDEJŰ csoportszám-csökkenés a hibára jellemző minta).
        csoportszam_log = db.query(models.AuditLog).filter(
            models.AuditLog.machine_id == log.machine_id,
            models.AuditLog.field_name == "calculated_csoportszam",
            models.AuditLog.timestamp == log.timestamp
        ).first()

        print(f"--- Gép id={log.machine_id} ({gep.megnevezes if gep else '?'} / gyári szám: {gep.gyari_szam if gep else '?'}) ---")
        print(f"  Időpont: {log.timestamp}, felhasználó: {felhasznalo.username if felhasznalo else '?'} (id={log.user_id})")
        print(f"  teher_class: {log.old_value} -> {log.new_value}")
        if csoportszam_log:
            print(f"  UGYANEKKOR calculated_csoportszam: {csoportszam_log.old_value} -> {csoportszam_log.new_value}  <-- erős jel, hogy ez a hiba okozta")
        print(f"  Jelenlegi állapot a gépen: teher_class={gep.teher_class if gep else '?'}, calculated_csoportszam={gep.calculated_csoportszam if gep else '?'}")
        print()

    print("Javaslat: nézd át egyenként a fenti géplistát a géppel foglalkozó kollégákkal - ha")
    print("valóban nem volt szándékos terhelésfokozat-módosítás az adott időpontban, a gép")
    print("adatlapján kézzel vissza lehet állítani a naplóban látott EREDETI (old_value) értékre.")

    db.close()


if __name__ == "__main__":
    main()
