import os
import typing

from sqlalchemy.orm import Session

import const
from database import models
from database.database import SessionLocal
from db.api_key import add_initial_api_key_for_admin
from db.wireguard import server_add_on_init
from script.wireguard import is_installed, start_interface, is_running, load_environment_clients


def setup_on_start():
    _db: Session = SessionLocal()
    servers: typing.List[models.WGServer] = _db.query(models.WGServer).all()
    for s in servers:
        try:
            last_state = s.is_running
            if is_installed() and last_state and is_running(s):
                start_interface(s)
        except Exception as e:
            print(e)

    if const.CLIENT:
        load_environment_clients(_db)

    if const.SERVER_INIT_INTERFACE is not None:
        server_add_on_init(_db)

    if const.SERVER_STARTUP_API_KEY is not None:
        ADMIN_USERNAME = os.getenv("ADMIN_USERNAME")
        add_initial_api_key_for_admin(_db, const.SERVER_STARTUP_API_KEY, ADMIN_USERNAME)
    _db.close()