from sqlalchemy.orm import Session

from database import SessionLocal
import models
from alap_konfig_feltolto import GEPTIPUSOK


def feltolt_geptipusokat(company_id=None, db: Session = None) -> int:
    """A "Tipus" szótár-elemeket (Beállítások > Gyártók és Típusok > Gép Típusok) tölti fel
    egy adott céghez - CSAK a hiányzókat adja hozzá, a meglévő (akár kézzel felvett, egyedi)
    elemeket nem törli és nem duplikálja.

    company_id nélkül az adatbázis első (jellemzően az "Alapértelmezett Cég") cégét célozza -
    ez azért fontos, mert a `/rendszeradmin/cegek/uj` új-cég létrehozás a "Tipus" szótársorokat
    az 1-es cégről MÁSOLJA át minden új cégnek (lásd routers/rendszeradmin.py), tehát ha az
    1-es cégnek nincs feltöltve ez a lista, minden AZUTÁN létrehozott cég is üresen kapja meg."""
    sajat_session = db is None
    if sajat_session:
        db = SessionLocal()

    if company_id is None:
        ceg = db.query(models.Company).first()
        if not ceg:
            print("❌ Hiba: Nincs cég az adatbázisban! Előbb indítsd el a rendszert és regisztrálj egy céget.")
            if sajat_session:
                db.close()
            return 0
        company_id = ceg.id

    meglevo = {
        r.ertek for r in db.query(models.Dictionary).filter(
            models.Dictionary.company_id == company_id, models.Dictionary.kategoria == "Tipus"
        ).all()
    }

    hozzaadva = 0
    for tipus in GEPTIPUSOK:
        if tipus not in meglevo:
            db.add(models.Dictionary(company_id=company_id, kategoria="Tipus", ertek=tipus))
            hozzaadva += 1

    db.commit()
    print(f"✅ {hozzaadva} db géptípus hozzáadva a(z) {company_id}. céghez (a meglévők érintetlenek maradtak).")

    if sajat_session:
        db.close()
    return hozzaadva


def feltolt_geptipusokat_minden_cegnek() -> None:
    """Végigmegy MINDEN cégen, és pótolja a hiányzó géptípusokat - egyszeri javító művelet
    olyan, már létező cégeknél, amelyek azelőtt jöttek létre, hogy az 1-es cégnek (vagy nekik
    maguknak) fel lett volna töltve ez a lista. Biztonságos többször is lefuttatni."""
    db = SessionLocal()
    cegek = db.query(models.Company).all()
    for ceg in cegek:
        feltolt_geptipusokat(ceg.id, db=db)
    db.close()


if __name__ == "__main__":
    feltolt_geptipusokat_minden_cegnek()
