#! /usr/bin/env python3

def read_file(path: str) -> "List of lines":
    f = open(path, 'r')

    # f.read(buflen) - binary read
    # f.readline()   - 1 Textzeile lesen -> str
    # f.readlines()  - alle Textzeilen lesen -> list
    # f ist gleichzeitig Iterator

    # 1. Variante: explizite for-Schleife
    lines = []
    for line in f.readlines():
        lines.append(line.rstrip())

    # 2. Variante: Mit Hilfe von Lambda und f als Iterator
    #lines = list(map(lambda s: s.rstrip(), f))

    # 3. Variante: Klassenfunktion rstrip und f als Iterator
    #lines = list(map(str.rstrip, f))

    # 4. Variante: Mit List Comprehension und f als Iterator
    #lines = [line.rstrip() for line in f]

    f.close()

    print(lines)


def parse_passwd_line(line: str) -> "Dict of passwd details":
    pass


def build_userlist(lines) -> "List of user dicts":
    pass


def print_userlist_sorted_by_username(userlist):
    pass


def print_userlist_sorted_by_uid(userlist):
    pass


def main():
    # Dictionary mit Ausgabe-Funktionen als Referenz
    output_functions = {
                        'username': print_userlist_sorted_by_username,
                        'uid': print_userlist_sorted_by_uid,
                       }
    # Zum Test diese spezielle Ausgabe-Funktion verwenden
    # 'username' kommt spaeter von der Kommandozeile
    outfunc = output_functions['username']

    lines = read_file("/etc/passwd")
    userlist = build_userlist(lines)
    outfunc(userlist)


main()
