#!/usr/bin/python3
import sys
from daemon import Daemon
import config as Config

def usage():
    print("\nUsage: Recordurbate [add | del] username")
    print("       Recordurbate [start | stop | restart]")
    print("       Recordurbate list")
    print("       Recordurbate import list.txt")
    print("       Recordurbate export [file location]\n")
    print("       Recordurbate help\n")

def check_num_args(num):
    if len(sys.argv) != num:
        usage()
        return False
    
    return True

def add():
    if not check_num_args(3): return

    # load config and others
    config = Config.load_config()
    username = sys.argv[2].lower()
    idx = Config.find_in_config(username, config)

    # if already added
    if idx:
        print("{} has already been added".format(username))
        return

    # add and save
    config["streamers"].append(username)
    if Config.save_config(config):
        print("{} has been added".format(username))

def remove():
    if not check_num_args(3): return
    
    # load config and others
    config = Config.load_config()
    username = sys.argv[2].lower()
    idx = Config.find_in_config(username, config)

    # if not in list
    if idx == None:
        print("{} hasn't been added".format(username))
        return

    # delete and save
    del config["streamers"][idx]
    if Config.save_config(config):
        print("{} has been deleted".format(username))

def list_streamers():
    if not check_num_args(2): return

    # load config, print streamers
    config = Config.load_config()
    print('Streamers in recording list:\n')
    for streamer in config['streamers']:
        print('- ' + streamer)

def import_streamers():
    if not check_num_args(3): return

    # load config
    config = Config.load_config()
    
    # open and loop file
    with open(sys.argv[2], "r") as f:
        for line in f:
            username = line.rstrip()

            # if already in, print, else append
            if username in config["streamers"]:
                print("{} has already been added".format(username))
            else:
                config["streamers"].append(username)
    
    # save config
    if Config.save_config(config):
        print("Streamers imported, Config saved")

def export_streamers():
    if len(sys.argv) not in (2, 3): return usage()

    # load config
    config = Config.load_config()
    export_location = config["default_export_location"]

    # check export loc
    if len(sys.argv) == 3:
        export_location = sys.argv[2]

    # write file
    with open(export_location, "w") as f:
        for streamer in config["streamers"]:
            f.write(streamer + "\n")
    
    print("Written streamers to file")

def bot():
    if not check_num_args(2): return
    
    # make daemon inst
    daemon = Daemon()

    # start, stop or restart
    if sys.argv[1] == "start":
        daemon.start()
    
    elif sys.argv[1] == "stop":
        daemon.stop()
    
    elif sys.argv[1] == "restart":
        daemon.restart()

argument_map = {
    "help": usage,
    "add": add,
    "del": remove,
    "list": list_streamers,
    "import": import_streamers,
    "export": export_streamers,
    "start": bot, "stop": bot, "restart": bot
}

if __name__ == "__main__":
    try:
        func = argument_map.get(sys.argv[1], usage)
        func()
    except SystemExit: # prevents usage showing twice when starting
        pass
    except:
        usage()