#!/usr/bin/python3

import time
import sys
from lib.cprint import cprint
import traceback

import __main__ as MAIN
    



class Refresher():
    def __init__(self):
        self.time = time.time()
        self.time_max = time.time()
        self.time_delta = 15
        self.update = 1
        self.name = "name" # exec
        self.cb = None #self.dummy_cb
    def dummy_cb(self):
        cprint("dummy_cd()",time.time()-self.time)

    def reset(self):
        self.time = time.time() 
        self.update = 1

    def refresh(self):
        if self.update: 
            if self.time+self.time_delta < time.time():
                self._refresh()
        else:
            self.time = time.time() 

    def _refresh(self):
        cprint("_refresh()",self.name,self)
        if not MAIN.INIT_OK:
            return

        self.time_max = time.time()
        self.time     = time.time()
        self.update = 0
        try:
            if self.cb:
                self.cb()
            else:
                self.dummy_cb()
        except Exception as e:
            cprint("_refresh except:",e,"cb:",self.cb,color="red")
            traceback.print_exc()
            cprint()
        cprint("t=",self.time_max- time.time())

    def loop(self,args={}):
        while 1:
            try:
                if MAIN.INIT_OK:
                    self.refresh()
                    #tkinter.Tk.update_idletasks(gui_menu_gui.tk)
            except Exception as e:
                traceback.print_exc()
                cprint("== cb EXCEPT",e,color="red")
                cprint("Error on line {}".format(sys.exc_info()[-1].tb_lineno),color="red")
                cprint(''.join(traceback.format_exception(None, e, e.__traceback__)),color="red")

            time.sleep(0.2)