#!/router/bin/python
from __future__ import print_function
import threading
import sys
import time
import outer_packages
import termstyle
import progressbar


class ProgressThread(threading.Thread):
    def __init__(self, notifyMessage = None):
        super(ProgressThread, self).__init__()
        self.stoprequest = threading.Event()
        self.notifyMessage = notifyMessage

    def run(self):
        if self.notifyMessage is not None:
            print(self.notifyMessage, end=' ')

        while not self.stoprequest.is_set():
            print("\b.", end=' ')
            sys.stdout.flush()
            time.sleep(5)

    def join(self, timeout=None):
        if self.notifyMessage is not None:
            print(termstyle.green("Done!\n"), end=' ')
        self.stoprequest.set()
        super(ProgressThread, self).join(timeout)


class TimedProgressBar(threading.Thread):
    def __init__(self, time_in_secs):
        super(TimedProgressBar, self).__init__()
        self.stoprequest    = threading.Event()
        self.stopFlag       = False
        self.time_in_secs   = time_in_secs + 15 # 80 # taking 15 seconds extra
        widgets             = ['Running TRex: ', progressbar.Percentage(), ' ',
                   progressbar.Bar(marker='>',left='[',right=']'),
                   ' ', progressbar.ETA()]
        self.pbar           = progressbar.ProgressBar(widgets=widgets, maxval=self.time_in_secs*2)
        

    def run (self):
        # global g_stop
        print()
        self.pbar.start()

        try:
            for i in range(0, self.time_in_secs*2 + 1):
                if (self.stopFlag == True):
                    break
                time.sleep(0.5)
                self.pbar.update(i)
            # self.pbar.finish()

        except KeyboardInterrupt:
            # self.pbar.finish()
            print("\nInterrupted by user!!")
            self.join()
        finally:
            print()

    def join(self, isPlannedStop = True, timeout=None):
        if isPlannedStop:
            self.pbar.update(self.time_in_secs*2)
            self.stopFlag = True
        else:
            self.stopFlag = True # Stop the progress bar in its current location
        self.stoprequest.set()
        super(TimedProgressBar, self).join(timeout)


def timedProgressBar(time_in_secs):
    widgets = ['Running TRex: ', progressbar.Percentage(), ' ',
                   Bar(marker='>',left='[',right=']'),
                   ' ', progressbar.ETA()]
    pbar = progressbar.ProgressBar(widgets=widgets, maxval=time_in_secs*2)
    pbar.start()
    for i in range(0, time_in_secs*2 + 1):
        time.sleep(0.5)
        pbar.update(i)
    pbar.finish()
    print()