#!/usr/bin/env python3


#importe
from shutil import get_terminal_size
import os
import sys
import subprocess
import platform

#helper funktions
def line(content=None):
    print("-"*int(get_terminal_size().columns))
    if content is not None:
        print(content)
        print("-"*int(get_terminal_size().columns))

def box(content):
    content_lines = content.split("\n")
    width = max(len(x) for x in content_lines)

    print("+" + "-" * width + "+")

    for text in content_lines:
        print("|" + text.ljust(width) + "|")

    print("+" + "-"* width + "+")

path = os.path.join(os.path.dirname(__file__), "prg")


programs = {}

for root, dirs, files in os.walk(path):
    matching = []

    for f in files:
        if f.startswith("SJNet_") and f.endswith(".py"):
            matching.append(f)

    if matching:
        folder = os.path.relpath(root, path)

        if folder == ".":
            folder = ""

        programs[folder] = matching

def detect():
    try:
        distro = platform.freedesktop_os_release()
    except:
        return

    name = distro.get("NAME", "").lower()

    if "arch" in name:
        box("Arch Linux detected.\nRespect. You chose the hard mode.")
    elif "gentoo" in name:
        box("Gentoo detected.\nThe compiler has awakened.")
    elif "debian" in name:
        box("Debian detected.\nStable mode activated.")
    elif "ubuntu" in name:
        box("Ubuntu detected.\nThe beginner gateway has opened.")
    elif  os.geteuid() == 0:
        box("Running as root.\nPlease don't delete the universe.")

#main


def menu():
    detect()

    if not programs:
        box("Keine SJNet_*.py Programme gefunden.")
        sys.exit(1)


    box("Available programs:")

    counter = 1
    program_map = {}

    for folder, files in programs.items():

        if folder:
            print(folder)

            for file in files:
                print(f"  {counter}: {file}")

                program_map[counter] = os.path.join(
                    path,
                    folder,
                    file
                )

                counter += 1

        else:
            for file in files:
                print(f"{counter}: {file}")

                program_map[counter] = os.path.join(
                    path,
                    file
                )

                counter += 1

    try:
        choose = int(input("enter number of the programm you want: > "))
        chosen = program_map[choose]

    except ValueError:
        print("Es muss eine Nummer sein.")
        sys.exit(1)

    except KeyError:
        print("Es muss eine der angebotenen Nummern sein.")
        sys.exit(1)

    print("\n")
    try:
        subprocess.run([sys.executable, chosen])
    except KeyboardInterrupt:
        print("Interrupt signal recived...")
        sys.exit(0)



menu()
