import flask
import multiprocessing as mp
import time
import allTests

app = flask.Flask(__name__)
LOG = flask.logging.create_logger(app)

class Control:
    def __init__(self):
        self.desc = ""
        self.status = "Idle"
        self.proc = None
ctrl = Control()

def test_run(mode,test_ids,start_now):
    print(f"test_run {mode} {test_ids} {start_now}")
    if test_ids == "":
        test_ids = []
    else:
        test_ids = [int(x) for x in test_ids.split(',')]
    allTests.main_loop(mode,test_ids,start_now)

@app.route("/")
def main():
    try:
        with open('Data/status.txt','r') as f_in:
            ctrl.status = f_in.readlines()[0]
    except:
        print("Couldn't open status.txt")
    if ctrl.proc is None or not ctrl.proc.is_alive():
        ctrl.desc = ""
        ctrl.status = "Idle"
    return flask.render_template("index.html",status=f"{ctrl.desc}{ctrl.status}")

@app.route("/testRun", methods=['GET', 'POST'])
def testRun():
    global ctrl
    if ctrl.proc is None or not ctrl.proc.is_alive():
        mode = flask.request.form['mode']
        test_ids = flask.request.form['test_ids']
        start_now = False
        if 'start_now' in flask.request.form:
            start_now = True
        ctrl.proc = mp.Process(target=test_run,args=(mode,test_ids,start_now,),daemon=True)
        ctrl.proc.start()
        ctrl.desc = f"Running {mode} : {test_ids}."
    return flask.redirect(flask.url_for('main'))

@app.route("/testStop", methods=['GET', 'POST'])
def testStop():
    global ctrl
    if ctrl.proc is not None:
        ctrl.proc.terminate()
        ctrl.proc.join()
        ctrl.proc = None
        ctrl.desc = ""
        ctrl.status = "Idle"
        time.sleep(0.5)
        p_stop = mp.Process(target=allTests.jammerOffQuick)
        p_stop.start()
        p_stop.join()
    with open('Data/status.txt','w') as f_out:
        print("",file=f_out)
    return flask.redirect(flask.url_for('main'))

if __name__ == "__main__":
    with open('Data/status.txt','w') as f_out:
        print("",file=f_out)
    p_stop = mp.Process(target=allTests.jammerOffQuick)
    p_stop.start()
    p_stop.join()
    app.run(host='0.0.0.0',port=20000,threaded=True)
