import models
from sqlalchemy.orm import Session

SZEREPKOR_LICENC_MEZO = {
    "Felhasználó": "licenc_max_dolgozo",
    "Emelőgép ügyintéző": "licenc_max_ugyintezo",
}


def felhasznalo_letszam(ceg_id: int, role: str, db: Session) -> int:
    """Az adott cég adott szerepkörű, jelenleg aktív (nem inaktivált) felhasználóinak száma -
    inaktiválással a "hely" felszabadul, ez adja a szabad licenc-helyet."""
    return db.query(models.User).filter(
        models.User.company_id == ceg_id,
        models.User.role == role,
        models.User.aktiv == True
    ).count()


def gep_letszam(ceg_id: int, db: Session) -> int:
    return db.query(models.Machine).filter(models.Machine.company_id == ceg_id).count()


def licenc_tullepne_uj_felhasznalonal(ceg, role: str, db: Session):
    """
    (túllépné_e, jelenlegi_létszám, limit) - egy ÚJ, adott szerepkörű felhasználó felvétele
    túllépné-e a cég licencét. limit=None -> korlátlan (sosem lép túl). Csak a licenccel
    szabályozott 2 szerepkörnél (Felhasználó/EÜI) értelmezett - máshol
    (Admin, Emelőgép szakértő, Emelőgép vizsgáló - rendszeradmin hozza létre) mindig
    (False, None, None).
    """
    mezo = SZEREPKOR_LICENC_MEZO.get(role)
    if not mezo or not ceg:
        return False, None, None
    limit = getattr(ceg, mezo, None)
    if limit is None:
        return False, None, None
    jelenlegi = felhasznalo_letszam(ceg.id, role, db)
    return jelenlegi >= limit, jelenlegi, limit


def licenc_reaktivalas_hiba(user, db: Session):
    """J-06 (v66): None, ha a felhasználó (vissza)aktiválható; különben a hibaüzenet. Csak INAKTÍV felhasználóra
    értelmezett (aktívra mindig None). Ugyanazt a szabályt alkalmazza, mint az új felhasználó felvétele
    (licenc_tullepne_uj_felhasznalonal): az inaktív fiók nem számít bele a létszámba, ezért visszakapcsolásakor
    éppen úgy "új hely" kell neki. Három útról hívják (mind ugyanígy ellenőrzi a VIVÜ egy-per-cég szabályt is):
    users.py kapcsol_felhasznalo_aktiv, rendszeradmin_felhasznalok.py aktiv_beallitas és a szerkesztő 'aktív' pipája."""
    if user.aktiv:
        return None
    ceg = db.query(models.Company).filter(models.Company.id == user.company_id).first()
    tullepne, jelenlegi, limit = licenc_tullepne_uj_felhasznalonal(ceg, user.role, db)
    if tullepne:
        return (f"A cég licenc-limitje betelt ({jelenlegi}/{limit}) ennél a szerepkörnél, ez a felhasználó nem aktiválható vissza. "
                f"Előbb inaktiválj egy másik, azonos szerepkörű felhasználót, vagy keresd az üzemeltetőt a bővítéshez.")
    return None


def licenc_tullepne_uj_gepnel(ceg, db: Session):
    """(túllépné_e, jelenlegi_darabszám, limit) - egy ÚJ gép felvitele túllépné-e a cég licencét."""
    if not ceg or ceg.licenc_max_gep is None:
        return False, None, None
    jelenlegi = gep_letszam(ceg.id, db)
    return jelenlegi >= ceg.licenc_max_gep, jelenlegi, ceg.licenc_max_gep
