from sqlalchemy.orm import Session
import models

# Rendszerben lévő géptípusok (A te teljes listád)
GEPTIPUSOK = [
    "3312 - Gyalogkíséretű targonca", "3313 - Vezetőállásos targonca", "3324 - Vezetőüléses targonca",
    "3327 - Vontató targonca", "3336 - Autonóm komissiózó targonca", "3411 - Dömper (kerekes anyagszállító)",
    "3412 - Önrakodó dömper", "3624 - Betonszállító mixer gépkocsi", "3626 - Betonszállító mixer gépkocsi betonszivattyúval",
    "3627 - Kényszertömörítésű szilárd hulladékgyűjtő és szállító gép", "3628 - Szennyvízszállító és szippantó jármű",
    "3652 - Víz-, szennyvíz-, zagy- és iszapszivattyú", "3681 - Beton-, bitumen-, habarcsszivattyú és szivattyú aggregát",
    "4111 - Járműemelő", "4121 - Emelőasztal és felrakógép", "4141 - Parkoló emelő", "4191 - Szintkülönbség kiegyenlítő",
    "4211 - Ollós emelőállvány", "4213 - Gépjármű emelő-hátfal", "4221 - Mobil szerelőállvány", "4223 - Mobil szerelőkosár",
    "4224 - Hidraulikus szerelőkosaras gépjármű és utánfutó", "4225 - Hídvizsgáló", "4226 - Építési személy- és teherfelvonó",
    "4227 - Függesztett rendszerű, mozgó munkahíd", "4228 - Emelőállvány, oszlopos kúszó munkaállvány", "4329 - Reptéri catering jármű",
    "4374 - Konténer emelő", "4411 - Autódaru", "4412 - Emelve szállító gépjármű", "4431 - Lánctalpas daru",
    "4451 - Járműre szerelt daru", "4341 - Toronydaru", "4351 - Árbócdaru", "4371 - Bakdaru / bakállvány",
    "4372 - Forgódaru", "4391 - Födémdaru", "4361 - Híddaru, futódaru", "4362 - Portáldaru", "4373 - Ablakdaru",
    "4375 - Konzoldaru", "4511 - Hidraulikus rakodó, homlokrakodó, forgórakodó", "4572 - Kompaktor", "4593 - Vagonkirakó",
    "C - Elektromos láncos emelő", "C - Villamos sodronyköteles emelő", "C - Elektromos csörlő",
    "C - Vákuumemelő adapter", "C - Tömlős vákuum emelő", "C - Pneumatikus emelő",
    "D - Kézi láncos emelő, futómacska", "D - Karos láncos emelő", "D - Fogasléces emelő, olajemelő",
    "D - Kötélvonszoló", "D - Fordítócsiga, csörlő", "E - Körkötél (Poliészter)", "E - Emelőheveder (Poliészter)",
    "E - Poliészter függeszték", "E - Sodrott és fonatolt kötél", "E - Láncfüggeszték", "E - Gyűjtőkarika, összekötő",
    "E - Horog", "E - Emelőlánc", "E - Sodronykötél függeszték", "E - Acél sodronykötél", "E - Megfogó",
    "E - Hordófogó", "E - Emelőmágnes", "E - Emelőgerenda", "E - Emelőszem, sekli", "F - Kézi hidraulikus targonca (Béka)",
    "F - Mobil emelőasztal", "F - Kézi magasemelésű targonca", "F - Daru adapter", "F - Darumérleg", "F - Targonca adapter",
    "G - Racsnis heveder", "G - Láncos rakományrögzítő", "G - Sarokvédő", "G - Rakományhatároló", "G - Csúszásgátló",
    "G - Pántszalag", "H - Leesés elleni védelem"
]

# Szabályok dictionary alapú definiálása
MEZO_SZABALYOK = {
    "NAGY_GEP": {
        "kotelezo": [
            "megnevezes", "gyarto", "tipus", "gyari_szam", "teherbiras", 
            "gyartas_datum", "uzembe_helyezes_datum", "szerkezeti_vizsgalat_datum", 
            "fovizsgalat_datum", "biztonsagi_vizsgalat_datum"
        ],
        "rejtett": [] # Leltári szám és megjegyzés opcionális marad
    },
    "TEHERFELVEVO": {
        "kotelezo": [
            "megnevezes", "teherbiras", "gyari_szam", "biztonsagi_vizsgalat_datum"
        ],
        "rejtett": [
            "gyarto", "tipus", "uzembe_helyezes_datum", 
            "szerkezeti_vizsgalat_datum", "fovizsgalat_datum"
        ]
    },
    "KEZI_EMELO": {
        "kotelezo": [
            "megnevezes", "gyarto", "tipus", "gyari_szam", 
            "teherbiras", "biztonsagi_vizsgalat_datum"
        ],
        "rejtett": [
            "szerkezeti_vizsgalat_datum", "fovizsgalat_datum"
        ]
    }
}

def besorol_geptipust(geptipus: str) -> str:
    """Szakmai logika alapján besorolja a géptípust a megfelelő kategóriába."""
    gep_lower = geptipus.lower()
    
    # Kifejezett teherfelvevők és tartozékok
    if geptipus.startswith(("E -", "G -", "H -")) or any(k in gep_lower for k in ["adapter", "mágnes", "horog", "sekli"]):
        return "TEHERFELVEVO"
    
    # Kézi és kisebb emelők
    if geptipus.startswith(("D -", "F -")):
        return "KEZI_EMELO"
    
    # Nagy gépek
    if geptipus[0].isdigit() or geptipus.startswith("C -"):
        return "NAGY_GEP"
        
    return "KEZI_EMELO" 

def feltolt_alap_konfigokat(db: Session, company_id: int):
    """
    Végigmegy a géptípusokon, besorolja őket, és elmenti az 
    alapértelmezett szabályokat a megadott céghez.
    """
    hozzadaott_rekordok = 0
    
    for geptipus in GEPTIPUSOK:
        kategoria = besorol_geptipust(geptipus)
        szabaly = MEZO_SZABALYOK[kategoria]
        
        kotelezo_str = ",".join(szabaly["kotelezo"])
        rejtett_str = ",".join(szabaly["rejtett"])
        
        # Ellenőrizzük, hogy létezik-e már a konfiguráció
        letezo = db.query(models.MachineTypeConfig).filter_by(
            company_id=company_id, geptipus=geptipus
        ).first()
        
        if not letezo:
            uj_konfig = models.MachineTypeConfig(
                company_id=company_id,
                geptipus=geptipus,
                kotelezo_mezok=kotelezo_str,
                rejtett_mezok=rejtett_str
            )
            db.add(uj_konfig)
            hozzadaott_rekordok += 1
            
    db.commit()
    print(f"Sikeresen feltöltve {hozzadaott_rekordok} db alap űrlapmező-szabály a(z) {company_id}. céghez.")