"""Modul-rendszer indításkori alapozása (kiemelve a main.py-ból, hogy tesztelhető legyen).

J-08 (v67, docs/JOGOSULTSAGOK.md): a korábbi automatika MINDEN újraindításkor lefutott, és minden modul nélküli céget az
ÖSSZES modulhoz, minden modul nélküli felhasználót a cége ÖSSZES moduljához juttatott. Ennek három káros mellékhatása volt:
  1. az ÚJ cég (a /rendszeradmin/cegek/uj modul nélkül hozza létre) az első újraindításkor minden modult megkapta - az
     előfizetetleneket is -, és a felhasználói is;
  2. a rendszeradmin „inaktív felhasználó modul-jogosultságainak törlése” takarítása újraindításkor visszaállt;
  3. a VIVU / EBK fiók, amelynek modulja kiürült (pl. az RA kikapcsolta a cég VIVÜ modulját), a cég összes másik modulját is
     megkapta, holott ezek a szerepkörök szándékosan egy modulra korlátozottak.
Az automatika eredeti célja kizárólag az volt, hogy a modul-rendszer BEVEZETÉSEKOR (egy akkor már működő adatbázison) senki ne
záródjon ki hirtelen abból, amit addig használt. Ezért mostantól CSAK akkor fut, ha az egész rendszerben sehol nincs modul-
hozzárendelés (sem cégnél, sem felhasználónál) - azaz egy modul-rendszer előtti adatbázis első indításakor. Ahol már van bármilyen
hozzárendelés (az élesben évek óta), újraindításkor SEMMI nem változik: a modulokat a rendszeradminisztrátor állítja
(/rendszeradmin/cegmodul, /rendszeradmin/usermodul).
"""
import models

# (kód, név, ikon) - a modul-törzsadat. Hiányzó sorokat az indításkor pótoljuk (a meglévőket nem módosítjuk).
MODUL_SEEDEK = [
    ("EMELOGEP", "Emelőgép nyilvántartás", "fa-truck-ramp-box"),
    ("TUZVEDELEM", "Tűzvédelem", "fa-fire-extinguisher"),
    ("EBK", "Biztonsági és egészségvédelmi koordinátor", "fa-helmet-safety"),
    ("VIVU", "Veszélyes Ipari Védelmi Ügyintéző", "fa-radiation"),
]

# Az egy modulra korlátozott szerepkörök (ld. routers/users.py, rendszeradmin_felhasznalok.modulok_igazitasa).
EGY_MODULOS_SZEREPKOROK = {"VIVU": "VIVU", "EBK": "EBK"}


def modul_seedek_potlasa(db) -> None:
    """A hiányzó modul-törzsadat sorok felvétele (idempotens; commitol)."""
    for kod, nev, ikon in MODUL_SEEDEK:
        if not db.query(models.Modul).filter(models.Modul.kod == kod).first():
            db.add(models.Modul(kod=kod, nev=nev, ikon=ikon))
    db.commit()


def van_modul_hozzarendeles(db) -> bool:
    """Van-e a rendszerben BÁRMELY cég- vagy felhasználó-modul hozzárendelés."""
    if db.query(models.company_modulok).first() is not None:
        return True
    return db.query(models.user_modulok).first() is not None


def kezdeti_modul_feltoltes(db) -> bool:
    """Modul-rendszer előtti adatbázis első indításakor minden céget az összes modulhoz, a felhasználókat a cégük moduljaihoz
    juttatja (szerepkör-tudatosan: VIVU -> csak VIVU, EBK -> csak EBK, Megtekintő -> egyik sem: a Megtekintő vagy az EBK, vagy
    a VIVÜ modult használja, ezt a szerepkör nem dönti el). Ha van már bármilyen hozzárendelés: nem csinál semmit.
    Visszatérés: True, ha lefutott a feltöltés. Commitol."""
    if van_modul_hozzarendeles(db):
        return False
    osszes_modul = db.query(models.Modul).all()
    for ceg in db.query(models.Company).all():
        ceg.engedelyezett_modulok.extend(osszes_modul)
    db.commit()
    for felhasznalo in db.query(models.User).all():
        ceg_modulok = list(felhasznalo.ceg.engedelyezett_modulok) if felhasznalo.ceg else []
        if felhasznalo.role in EGY_MODULOS_SZEREPKOROK:
            kod = EGY_MODULOS_SZEREPKOROK[felhasznalo.role]
            felhasznalo.sajat_modulok.extend([m for m in ceg_modulok if m.kod == kod])
        elif felhasznalo.role == "Megtekintő":
            continue
        else:
            felhasznalo.sajat_modulok.extend(ceg_modulok)
    db.commit()
    return True
