#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import argparse
import sys

from rich_argparse import RichHelpFormatter

if __name__ == "__main__":
    # Management of input arguments
    parser = argparse.ArgumentParser(
        description="---- Subscribe/unsubscribe as a watcher to a simulation file stored in IMAS DB",
        formatter_class=RichHelpFormatter,
    )
    parser.add_argument("-p", "--pulse", help="pulse number", required=True, type=int)
    parser.add_argument("-r", "--run", help="run number", required=True, type=int)
    parser.add_argument("-d", "--delete", help="email to remove from watcher list", required=False, type=str)
    parser.add_argument("-f", "--firstname", help="user firstname", required=False, type=str)
    parser.add_argument("-n", "--name", help="user name", required=False, type=str)
    parser.add_argument("-e", "--email", help="user e-mail", required=False, type=str)
    args = vars(parser.parse_args())

    pulse = args["pulse"]
    run = args["run"]
    firstname = args["firstname"]
    name = args["name"]
    email = args["email"]
    del_email = args["delete"]

    delflag = 0
    if del_email != None:
        email = del_email
        delflag = 1
    else:
        if (firstname == None) | (name == None) | (email == None):
            print(
                """  You need to specify your firstname, name and e-mail address""",
                file=sys.stderr,
            )
            print("""  Type 'watch_db_entry -h' for help""", file=sys.stderr)
            print("""  ----> Aborted.""", file=sys.stderr)
            import sys

            sys.exit(1)

    # ------------------------------------------------------------------------------------------------------------

    # Set up the name of the yaml file
    add0 = ""
    add0_length = 4 - len(str(run))
    for i in range(add0_length):
        add0 = add0 + "0"

    filename = "ids_" + str(pulse) + add0 + str(run) + ".watcher"
    folder = "/work/imas/shared/imasdb/ITER"
    fullpath = folder + "/3/0/" + filename

    if delflag == 0:
        # Append a line to the file
        f = open(fullpath, "a")
        f.write((""" %s \t %s \t %s \n""").expandtabs(17) % (firstname, name, email))
        f.close()

        print("----> Watcher " + firstname + " " + name + " added for pulse " + str(pulse) + " run " + str(run) + ".")

    else:
        # Read the file
        f = open(fullpath, "r")
        lines = f.readlines()
        f.close()
        # Write the file except the line you don't want
        f = open(fullpath, "w")
        for line in lines:
            if line.find(del_email) == -1:
                f.write(line)
        f.close()
        print(
            "----> Watcher with email address "
            + del_email
            + "removed for pulse "
            + str(pulse)
            + " run "
            + str(run)
            + "."
        )
