#!/bin/python3

import data_source_users
import re


def writeToUserFile(username, userdata):
    # path to the user file
    path = "data/users/%s" % (username)

    # new_content is initialised with the contents from data/users/name
    # and all needed values are either updated or removed from it
    # depending on whats given in the data_source_users.py file
    with open(path, "r+") as f:
        new_content = f.read()

    # do not change name
    """
    # Simply replace names and mail addresses with regex
    new_content = re.sub(
        "first_name: .*",
        "first_name: %s" % (userdata["vorname"])
        , new_content)
    new_content = re.sub(
        "last_name: .*",
        "last_name: %s" % (userdata["nachname"])
        , new_content)
    new_content = re.sub(
        "full_name: .*",
        "full_name: %s %s" % (userdata["vorname"], userdata["nachname"])
        , new_content)"""

    # do not change email addresses
    """new_content = re.sub(
        "mail_address: \S*@perfact.de",
        "mail_address: %s.%s@perfact.de" % (userdata["vorname"].replace(" ", ""), userdata["nachname"])
        , new_content)"""

    # Replace old value if its key is found in the old user file
    # else, append the key/value pair

    if "position: " in new_content:
        new_content = re.sub(
        "position: .*",
        "position: \"%s\"" % (userdata["position"])
        , new_content)
    else:
        new_content += "\nposition: \"" + userdata["position"] + "\""

    # replace position_eng with positioneng
    if "position_eng: " in new_content:
        new_content = re.sub(
        "position_eng: .*",
        "position_eng: \"%s\"" % (userdata["positioneng"])
        , new_content)
    elif "positioneng: " in new_content:
        new_content = re.sub(
        "positioneng: .*",
        "position_eng: \"%s\"" % (userdata["positioneng"])
        , new_content)
    else:
        new_content += "\nposition_eng: \"" + userdata["positioneng"] + "\""

    # Only add value if its given in data_source_users
    # else, omit
    if userdata["mobil"] and userdata["mobil"] != " ":
        if "mobil: " in new_content:
            new_content = re.sub(
            "mobil: .*",
            "mobil: \"%s\"" % (userdata["mobil"])
            , new_content)
        else:
            new_content += "\nmobil: \"" + userdata["mobil"] + "\""
    else:
        new_content = re.sub("mobil:.*", "", new_content)

    if userdata["durchwahl"] and userdata["durchwahl"] != "0":
        if "telefon_extention: " in new_content:
            new_content = re.sub(
            "telefon_extention: .*",
            "telefon_extention: %s" % (userdata["durchwahl"])
            , new_content)
        else:
            new_content += "\ntelefon_extention: " + userdata["durchwahl"]
    else:
        new_content = re.sub("telefon_extention:.*", "", new_content)

    if userdata["signature_per_mail"]:
        if "signature_per_mail: " in new_content:
            new_content = re.sub(
            "signature_per_mail: .*",
            "signature_per_mail: %s" % (str(userdata["signature_per_mail"]))
            , new_content)
        else:
            new_content += "\nsignature_per_mail: " + str(userdata["signature_per_mail"])
    else:
        new_content = re.sub("signature_per_mail:.*", "", new_content)

    # ensure file ends with newline
    if not new_content.endswith("\n"):
        new_content += "\n"

    # Write new content to data/users/name
    with open(path, "w") as f:
        f.write(new_content)


def main():
    # Gets the source data from data_source_users.oy
    users = data_source_users.data

    for username in users.keys():
        # TODO: decide if/what exceptions are needed
        if not username.startswith("stest"):
            writeToUserFile(username, users[username])


if __name__ == "__main__":
    main()
