"""
Wraps systemctl to install, uninstall, start & stop systemd services.

If we use a debian package instead, we can get rid of all this code.
"""

import os
import subprocess


def reload_daemon():
    """
    Equivalent to systemctl daemon-reload.

    Makes systemd discover new units.
    """
    subprocess.run(["systemctl", "daemon-reload"], check=True)


def install_unit(name, unit, path="/etc/systemd/system"):
    """
    Install unit with given name
    """
    with open(os.path.join(path, name), "w") as f:
        f.write(unit)


def uninstall_unit(name, path="/etc/systemd/system"):
    """
    Uninstall unit with given name
    """
    subprocess.run(["rm", os.path.join(path, name)], check=True)


def start_service(name):
    """
    Start service with given name.
    """
    subprocess.run(["systemctl", "start", name], check=True)


def stop_service(name):
    """
    Start service with given name.
    """
    subprocess.run(["systemctl", "stop", name], check=True)


def restart_service(name):
    """
    Restart service with given name.
    """
    subprocess.run(["systemctl", "restart", name], check=True)


def enable_service(name):
    """
    Enable a service with given name.

    This most likely makes the service start on bootup
    """
    subprocess.run(["systemctl", "enable", name], check=True)


def disable_service(name):
    """
    Enable a service with given name.

    This most likely makes the service start on bootup
    """
    subprocess.run(["systemctl", "disable", name], check=True)


def check_service_active(name):
    """
    Check if a service is currently active (running)
    """
    try:
        subprocess.run(["systemctl", "is-active", name], check=True)
        return True
    except subprocess.CalledProcessError:
        return False


def check_service_enabled(name):
    """
    Check if a service is enabled
    """
    try:
        subprocess.run(["systemctl", "is-enabled", name], check=True)
        return True
    except subprocess.CalledProcessError:
        return False
