from celery import shared_task
from .models import *

import os
import subprocess

@shared_task
def whereami():
    print(os.uname())
    return os.uname()

def configure_wireguard_server(wireguardvpnpool):
    """
    - Create wireguard config (DB query -> string)
    - Submit config to cdist worker
    - Change config locally on worker / commit / shared

    """

    config = wireguardvpnpool.wireguard_config
    server = wireguardvpnpool.vpn_server_hostname

    print(f"Configuring VPN server {server} (async)")
#    cdist_configure_wireguard_server.apply_async((config, server), queue='cdist')
    cdist_configure_wireguard_server.apply_async((config, server))

@shared_task
def cdist_configure_wireguard_server(config, server):
    """
    Create config and configure server.

    To be executed on the cdist workers.
    """

    dirname= "/home/app/.cdist/type/__ungleich_wireguard/files/"
    fname = os.path.join(dirname,server)

    print(f"Configuring VPN server {server} (on cdist host)")
    with open(fname, "w") as fd:
        fd.write(config)


    subprocess.run(f"cd {dirname} && git pull && git add {server} && git commit -m 'Updating config for ${server}' && git push",
                   shell=True)

    subprocess.run(f"cdist config -vv {server}", shell=True)

    # FIXME:
    # ensure logs are on the server
    # ensure exit codes are known
    return "All good"