"""CÉG SABLONOK FELTÖLTÉSE (v81) - az ellenőrzőlista-sablonok feltöltő szkriptjeinek hívása a rendszeradmin felületről. Leírás: docs/CEG_SABLONOK.md

MIÉRT?
    Új cég felvételekor (és meglévő cégnél kézzel) a rendszeradmin két jelölőnégyzettel futtathatja az eddig csak parancssorból indítható szkripteket:
      * `sablon_feltolto.py`          - MSZ 9721-4 TARGONCA: Szerkezeti vizsgálat / Fővizsgálat / Időszakos biztonsági felülvizsgálat + napi ellenőrzés;
      * `msz9721_sablon_feltolto.py`  - MSZ 9721-1 ÁLTALÁNOS és MSZ 9721-2 HÍD- ÉS BAKDARU: Szerkezeti / Fő / IBF + napi ellenőrzés.

FONTOS (ÁRNYÉKOLÁS): a rendszer a cég ellenőrzőlista-sablonjait a cég SAJÁT sorai közül veszi; ha a cégnek nincs egyetlen saját `JegyzokonyvSablon` /
    `NapiEllenorzesSablon` sora sem, az 1-es (alap) cég közös készletére esik vissza. Ha tehát egy cég akár csak az egyik készletet kapja meg saját példányban,
    a közös (1-es cégbeli) készlet NÁLA már nem látszik - ezért érdemes mindkét jelölőnégyzetet bekapcsolni. A saját példány az alap-sablonok későbbi
    frissítéseit sem kapja meg magától.

A szkriptek a cég azonos nevű SAJÁT sablonjait lecserélik (a többi, pl. kézzel felvett sablont nem érintik). Sorrend: előbb a targonca, utána az MSZ 9721-1/-2.
A hívó (route) commitol és naplóz; itt csak flush történik, így hiba esetén a hívó mindent visszagörgethet.
"""
import models
import msz9721_sablon_feltolto
import sablon_feltolto


def sajat_sablon_szamok(db, company_id: int) -> dict:
    """A cég SAJÁT ellenőrzőlista-sablonjainak száma: {"jegyzokonyv": n, "napi": m}."""
    def szam(kategoria):
        return db.query(models.Dictionary).filter(
            models.Dictionary.company_id == company_id, models.Dictionary.kategoria == kategoria
        ).count()
    return {"jegyzokonyv": szam("JegyzokonyvSablon"), "napi": szam("NapiEllenorzesSablon")}


def ceg_sablonok_feltoltese(db, company_id: int, targonca: bool = False, msz9721: bool = False) -> list:
    """A kijelölt szkriptek lefuttatása a megadott cégre (NEM commitol). Visszatérés: a lefutott készletek neve (naplózáshoz).
    Hiba esetén kivétel (a hívó db.rollback()-et hív)."""
    lefutott = []
    if targonca:
        if not sablon_feltolto.feltolt_sablonokat(company_id=company_id, db=db):
            raise RuntimeError("A cég nem található (sablon_feltolto)")
        lefutott.append("MSZ 9721-4 targonca (sablon_feltolto.py)")
    if msz9721:
        if not msz9721_sablon_feltolto.main(company_id=company_id, db=db):
            raise RuntimeError("A cég nem található (msz9721_sablon_feltolto)")
        lefutott.append("MSZ 9721-1 általános + MSZ 9721-2 híd- és bakdaru (msz9721_sablon_feltolto.py)")
    return lefutott
