#!/usr/bin/env python3

import os
import sys
import subprocess

import Items
import Interfaces


def show_help() :
    print("\n*****Serene Setup Wizard*****")
    print("  Options :")
    print("    --command-mode -c : Not using GUI\n")
    sys.exit()


def update() :
    subprocess.call(["sudo", "apt", "update"])
    print("")


def add_tasks(_list, _tasks) :
    
    if _tasks[0] == True :

        for task in _tasks :
            if task != True :
                add_tasks(_list, task)
    else :
        _list.append(_tasks)


args = sys.argv
if len(args) >= 3 :
    show_help()
elif len(args) == 2 :
    if args[1] == "-c" or args[1] == "--command-mode" :
        interface = Interfaces.CUI()
    else :
        show_help()
else :
    interface = Interfaces.Zenity()


# current directory
PATH = os.path.dirname(os.path.abspath(__file__))

# make users enter password to run this program on sudo
subprocess.call(["sudo", "echo"])

# if the directory "../data" does not exist, make it.
if not os.path.exists(PATH + "/../data") :
    subprocess.call(["sudo", "mkdir", PATH + "/../data"])


print("Welcome to serene-wizard!!\n")
print("Press Ctrl+C to exit.\n")

if not os.path.exists(PATH + "/../data/not_first_time") :
    
    items = Items.getItems_first_time(interface)
    
    tasks = list()
    i = 0
    while(i < len(items)) :
        
        result = items[i].first_time()

        if result is None :

            if i != 0:
                i = i - 1

            continue

        elif result == False :
            pass

        else :
            add_tasks(tasks, result)

        i = i + 1
    
    if len(tasks) == 0 :
        print("Done!")
        print("See you again!!\n")
        sys.exit()
    
    update()

    for i, task in enumerate(tasks) :
        interface.status(task[0], i, len(task))
        task[1]()

    print("Done!")
    print("See you again!!\n")

    subprocess.call(["sudo", "touch", PATH + "/../data/not_first_time"])

else :
    
    if interface.yesnoback("Do you want to run 'sudo apt update' ?"):

        update()

    items = Items.getItems(interface)

    while(True) :

        for i, item in enumerate(items) :
            
            print("{:<2}".format(i+1) , " : ", end="")
            item.show()
        
        result = interface.choose(len(items))
        
        if result :

            items[result-1].change()

        else :
            print("See you again!!\n")
            sys.exit()

