"""EGYSZERI, OPCIONÁLIS átültetés: a .env-ben lévő SMTP-adatok (SMTP_SERVER, SMTP_PORT, SMTP_USER,
SMTP_PASSWORD) bemásolása az adatbázisba (rendszer_beallitasok tábla), a jelszó TITKOSÍTVA.

MIKOR KELL FUTTATNI?
    Nem kötelező: amíg az adatbázisban nincs SMTP-beállítás, a rendszer automatikusan a .env
    értékeit használja (tartalék). Ez a szkript azoknak hasznos, akik a jelszót nem akarják a
    rendszeradmin felületen újra begépelni - egy paranccsal átkerül minden, és utána a .env-ből
    el lehet távolítani az SMTP_* sorokat (a felületen innentől minden állítható).

HOGYAN?  A projekt mappájából, az éles szerveren (a venv-ben):
        python migracio_smtp_env_to_db.py

BIZTONSÁGOS: többször is futtatható (idempotens) - ha az adatbázisban már van SMTP-szerver,
semmit nem ír felül. A jelszót nem írja ki a konzolra.
"""
from datetime import datetime, timezone

import models
from database import engine, SessionLocal
from config import SMTP_SERVER, SMTP_PORT, SMTP_USER, SMTP_PASSWORD
import email_beallitasok as eb
from titkosito_utils import titkosit


def main():
    # A tábla létrehozása (ha a szerver még nem indult újra az új kóddal, a tábla még nem létezik)
    models.RendszerBeallitas.__table__.create(bind=engine, checkfirst=True)

    db = SessionLocal()
    try:
        letezo = db.query(models.RendszerBeallitas).filter(
            models.RendszerBeallitas.kulcs == eb.KULCS_SZERVER
        ).first()
        if letezo and (letezo.ertek or "").strip():
            print("Az adatbázisban már van elmentett SMTP-szerver - nincs teendő (nem írtam felül semmit).")
            return

        if not SMTP_SERVER:
            print("A .env-ben nincs SMTP_SERVER megadva - nincs mit átültetni.")
            return

        # Ugyanazokat a kulcsokat és formátumot használjuk, mint a rendszeradmin felület (email_beallitasok.ment),
        # a jelszót pedig a titkosito_utils-szal titkosítjuk.
        tiszta = {
            "szerver": SMTP_SERVER,
            "port": str(SMTP_PORT),
            "felhasznalo": SMTP_USER,
            "jelszo": SMTP_PASSWORD or "",
            # A .env-alapú működés eddig SSL volt, tanúsítvány-ellenőrzés NÉLKÜL (az smtplib alapértelmezése).
            # Az átültetett beállítás ezt a működést változatlanul megtartja, hogy a levélküldés
            # ne romoljon el; a rendszeradmin felületen utána bekapcsolható az ellenőrzés.
            "biztonsag": "SSL",
            "felado_cim": "",
            "tls_ellenorzes": "0",
            "alkalmazas_url": "",
        }
        valtozott = eb.ment(db, tiszta, None)

        # Ha az alkalmazás URL-je már létezik (nem írjuk felül üresre) - az ment() üres értéket is
        # beírhat, ez itt új sor esetén ártalmatlan.
        db.add(models.AuditLog(
            company_id=1,
            user_id=None,
            field_name="E-mail beállítás módosítva",
            old_value="-",
            new_value="Átültetve a .env-ből (migracio_smtp_env_to_db.py): " + ", ".join(valtozott) + " (a jelszó értéke nem naplózott)"
        ))
        db.commit()
        print("Kész: az SMTP-beállítás átkerült az adatbázisba (a jelszó titkosítva).")
        print("Következő lépések: 1) nézd meg a rendszeradmin felületen (E-mail beállítások), 2) küldj teszt-levelet,")
        print("3) ha minden rendben, a .env-ből törölheted az SMTP_* sorokat.")
    finally:
        db.close()


if __name__ == "__main__":
    main()
