#from pyray import *
import pyray 
import sys
sys.path.insert(0,"/opt/LibreLight/Xdesk/")


CAPTION = 'R-FIX-LIST'
import tool.movewin as movewin

import pathlib

_file_path=pathlib.Path(__file__)
print("file:",_file_path)
movewin.check_is_started(CAPTION,_file_path)

win_title =CAPTION.strip().split()[-1]
store = movewin.load_all_sdl(win_title)
print(store)
POS=[10,10]
W=760
H=450
if store:
    POS[0] += 5   #frame kompensation
    POS[1] += 29  #frame kompensation
    POS=[store[-2],store[-1]]



pyray.set_config_flags(pyray.FLAG_WINDOW_RESIZABLE)
pyray.init_window(W, H, CAPTION) #"RAY-DMX")#,10,10,10,10)
pyray.set_window_min_size(200,200)
pyray.set_window_max_size(1000,1000)


win_con = movewin.Control()
win_con.title = win_title
win_con.winfo()
if POS:
    win_con.move(POS[0],POS[1])
print(POS,win_con.title)
#exit()


import sys
sys.path.insert(0,"/opt/LibreLight/Xdesk/")
import tool.tk_elm as tk_elm
#import tool.sdl_elm as sdl_elm

img = "/opt/LibreLight/Xdesk/icon/scribble.png"
IMG = pyray.load_image(img)
print(pyray.set_window_icon(IMG)) 

import time
import memcache
mc = memcache.Client(['127.0.0.1:11211'], debug=0)
#x=mc.get(k)

old_x = -10
old_y = -10
start = time.time()
frame_count = 0
fps_count = 0

a = "/usr/share/fonts/truetype/freefont/FreeSans.ttf"
a = "/usr/share/fonts/truetype/freefont/FreeSansBold.ttf"


k=200
a = "/usr/share/fonts/truetype/freefont/FreeSans.ttf"
font10l = pyray.load_font_ex(a, 10, None, 0);
a = "/usr/share/fonts/truetype/freefont/FreeSansBold.ttf"
font10 = pyray.load_font_ex(a, 12, None, 0);
print(dir(font10))
print(font10.baseSize)
##exit()
font20 = pyray.load_font_ex(a, 20, None, 0);
a = "/usr/share/fonts/truetype/freefont/FreeMono.ttf"
a = "/usr/share/fonts/truetype/freefont/FreeSansBold.ttf"
a = "/usr/share/fonts/truetype/freefont/FreeSans.ttf"
font25 = pyray.load_font_ex(a, 25, None, 0);

pyray.TextureFilter(3)


class EVENT():
    def __init__(self):
        self.dict = {}
        self.type = 0
        self.button=10
        self.buttons=[0,0,0,0]
xevent=EVENT()

class BUTTON():
    def __init__(self,master=None,txt="<BUTTON>",pos=[10,10,20,90]):
        #self.btn = tk_elm.Button(None,pos=[390,12,20,90])
        self.btn = tk_elm.Button(master,pos=pos)
        self.btn.btn1.color    = [127,127,127,255]
        #self.btn.btn1.type = "toggle"
        #self.btn.btn2.type = "toggle"
        #self.btn.btn3.type = "toggle"
        #btn.btn1.color_on = [155,155,155,255]
        #btn.btn2.color    = [155,55,155,255]
        #btn.btn2.color_on = [155,155,155,255]
        self.btn.btn3.color    = [55,155,155,255]
        self.btn.btn3.color_on = [55,255,255,255]
        self.btn.btn2.color_on = [55,255,255,255]

        self.btn.btn1.name=txt
        #x=btn.btn1.name

    def draw(self,event=None):
        font_size = font10.baseSize
        pos=self.btn.pos
        c=[122,122,122,122] #btn.btn2.get_color()
        pyray.draw_rectangle(pos[1],pos[0],pos[3],pos[2],c)

        c=self.btn.btn1.get_color()
        pyray.draw_rectangle(pos[1]+2,pos[0]+2,pos[3]-4,pos[2]-4,c)

        c=self.btn.btn3.get_color()
        #pyray.draw_rectangle(pos[1]+1,pos[0]+1,pos[3]-2,pos[2]-2,c)
        pyray.draw_rectangle_lines_ex([pos[1]+1,pos[0]+1,pos[3]-2,pos[2]-2],1,c)

        x=self.btn.btn1.name
        pyray.draw_text_ex(font10,str(x), [pos[1]+4,pos[0]+4], font_size, 0, [0,0,0,255])#pyray.YELLOW)#[0,255,0,255]) #pyray.YELLOW)

    def event(self,x,y,mouse):
        try:
            buttons = [0,0,0]
            button = 0
            PRESS=5 #1025
            RELEASE=6 #1026
            _type=0
            for i in range(3):#2,0,-1):
                #print(i,mouse)
                if mouse[i] == "press":
                    _type=PRESS
                if mouse[i] == "release":
                    _type=RELEASE
                if mouse[i]:
                    buttons[i] = 1
                    button = i+1

            xevent.dict={"pos":[y,x],"button":button,"buttons":buttons,"type":_type}

            #print(xevent.dict)
            pos=self.btn.pos
            
            if check_area(pos,[y,x]):
                #print("POS:",x,y,mouse,xevent.type)
                for i,v in enumerate(mouse):
                    if i==0:
                        #if v == "release": # or v == "click":
                        if v == "click": #"press" or v == "click": # or v == "release":
                            self.btn.btn1.type = "toggle"
                            self.btn.btn1.press() 
                            #xevent.type=5
                            #xevent.dict["button"] = 1
                            #self.btn.btn1.val.set(0)
            #xevent.dict["buttons"] = mouse
            #print(xevent.dict,xevent.type,xevent.button)
            self.btn.event(xevent)
        except Exception as e:
            import traceback
            print(traceback.format_exc())
            raise e

mouse_box_on = 0
mouse_box_on_pos = [0,0]
def draw_mouse_box(window,pos1,mouse=[None,None,None],color=[128,128,128],text=1):
    global mouse_box_on_pos 
    global mouse_box_on 

    if mouse[0]=="click":#"press":
        if mouse_box_on == 0:
            pos2 = pos1[:]
            mouse_box_on_pos = pos2
            mouse_box_on = 1
    else:
        mouse_box_on = 0

    if mouse[0]=="press":
        pos2 = mouse_box_on_pos[:]
        

        w=pos1[0]-pos2[0]
        h=pos1[1]-pos2[1]
        pos = pos2[:]
        #print(pos1,pos2,h,w)
        wd=1
        hd=1
        if w < 0:
            pos[0] = pos1[0]
            w*=-1
            wd=-1
        if h < 0:
            pos[1] = pos1[1]
            h*=-1
            hd=-1

        if w > 10 or h > 10:
            c=[255,255,255,255]
            pyray.draw_rectangle_lines_ex([pos[0],pos[1],w,h],1,c)
            font_size = font10l.baseSize
            pyray.draw_text_ex(font10l,str(pos1[0])+" "+str(pos1[1]), [pos1[0],pos1[1]-10], font_size, 0, pyray.WHITE)
            pyray.draw_text_ex(font10l,str(pos2[0])+" "+str(pos2[1]), [pos2[0]+5,pos2[1]+10], font_size, 0, pyray.WHITE)
            pyray.draw_text_ex(font10l,str(w), [pos2[0]+5+w/2*wd,pos2[1]], font_size, 0, pyray.WHITE)
            pyray.draw_text_ex(font10l,str(h), [pos2[0]+5,pos2[1]+h/2*hd], font_size, 0, pyray.WHITE)
            return pos1,pos2

mouse_old=[None,None,None]

def check_area_v(v1,v2,event_v):#elm_pos,event_pos):
    if event_v < v1+1: 
        return 0
    if event_v > v2-1: 
        return 0
    return 1

def check_area(pos,event_pos):
    v2 = pos[0]+pos[2]
    x = check_area_v(pos[0],v2,event_pos[0])
    v2 = pos[1]+pos[3]
    y = check_area_v(pos[1],v2,event_pos[1])
    if x and y:
        return 1


buttons={} #[]
cur = None
history = []
KEY_BUF={}

add=0
while not pyray.window_should_close():
    pyray.begin_drawing()

    pyray.clear_background(pyray.BLACK)
    pyray.Color(255,0,0,0)
    pyray.rl_enable_smooth_lines()



    font_size = font10.baseSize
    try:
        DATA=mc.get("fix")#cmd)
        GREY = [122,122,122,255]
        p=0
        keys = []
        host_list = {}
        if not DATA:
            DATA = {}
            print("mc.get ist NONE")
            pyray.draw_text_ex(font25,"ERR:{NO DATA}",[10,5], 25, 0,  pyray.VIOLET)
            pyray.end_drawing()
            time.sleep(0.5)
            continue

        for k in DATA:
            #print(k,DATA[k])
            #print(k)
            keys.append(k)
            host_list[k] = DATA[k] #[0]).ljust(" ",18) #,0,"=",0]
        keys.sort()
        
        k=keys[0]

        if cur is None:
            cur = k #k[3] #"xx123" # k


        p=0
        start = 0
        end   = start+10
        i=0
        for k,v in host_list.items():
            if i > end:
                break
            if i < start:
                continue

            x2 = 30
            y2 = 60+p #grid_y+p
            v = str(v).replace(" ","").replace("[","").replace("]","") 
            txt = str(k)+" "+str(v)

            key = txt.split(" ")[0]
            p+=32
            if key in buttons:
                btn = buttons[key]
            else:
                btn=BUTTON(None,txt,[y2,x2,30,690])
                buttons[key] = btn
                print("ADD",key,btn)
                add=1
            btn.btn.btn1.name = txt
            btn.btn.btn1.color_on = [255,255,0,255]
            #btn.btn.btn1.val.set(0)
            #if cur in btn.btn.btn1.name:
            #    btn.btn.btn1.val.set(255)
            #    #btn.btn.btn1.press() #val.set(255)
            i+=1


        if add:
            add=0
            print()
        w=200
        h=50

        x=200
        y=200

        pyray.draw_text_ex(font25,"FPS:{}".format(fps_count),[10,5], 25, 0,  pyray.VIOLET)

        m=pyray.get_mouse_position()
        #print(m)
        if m.x != old_x or m.y != old_y:
            old_x = m.x
            old_y = m.y

        mouse=[None,None,None]
        mouse_change=0
        for i in range(3):
            ev = ""
            if pyray.is_mouse_button_released(i):
                ev = "release"
            if pyray.is_mouse_button_pressed(i):
                ev = "click" #"press"
            if ev and ev != mouse[i]:
                mouse[i] = ev
                mouse_change=1

        if mouse_change:
            print("MOUSE:",mouse,old_x,old_y) #=[None,None,None]


        for i in range(1,12+1):
            _KEY = "KEY_F{}".format(i)
            x = pyray.KeyboardKey[_KEY]
            #k_val=pyray.is_key_pressed(x)
            k_val=pyray.is_key_down(x)
            if _KEY not in KEY_BUF:
                KEY_BUF[_KEY] = k_val
            if KEY_BUF[_KEY] != k_val:
                print("KEY_CHANGE",_KEY,k_val)
                KEY_BUF[_KEY] = k_val

        x=pyray.get_key_pressed()
        if x:
            print("key",x)
        x=pyray.is_key_pressed(pyray.KEY_F1)
        if x:
            print("key",x)

        if mouse != mouse_old and mouse != [None,None,None]:
            #print(mouse)
            mouse_old = mouse[:]
            

        for k,btn in buttons.items():
            btn.event(old_x,old_y,mouse_old)
            btn.draw()
        
        pyray.draw_text_ex(font20,"POS:{}:{}".format(int(m.x),int(m.y)),[10,34], 20, 0,  pyray.VIOLET)

        pyray.draw_rectangle(int(old_x-10),int(old_y-1),20,2,[255,0,255,255])
        pyray.draw_rectangle(int(old_x-1),int(old_y-10),2,20,[255,0,255,255])

        aapos = draw_mouse_box(None,[old_x,old_y],mouse_old,color=[128,128,128],text=1)

        pyray.end_drawing()
        
        time.sleep(1/11)

        for i,v in enumerate(mouse_old):
            if v == "release":
                mouse_old[i] = None
            if v == "click":
                mouse_old[i] = "press"
        #print(mouse_old)
        frame_count += 1
        if time.time()-start > 1:
            start = time.time()
            fps_count = frame_count
            frame_count = 0

        #pyray.set_window_size(POS[0],POS[1])
        #POS[0]+=1
        if pyray.is_window_resized():
            print( "RESIZE WINDOW OK")
        #print(pyray.FLAG_WINDOW_RESIZABLE  )
        #print("E",pyray.is_window_focused() )
    except KeyboardInterrupt as e:
        raise e
    except Exception as e:# KeyInterupt
        print("err",e)
        import traceback
        print(traceback.format_exc())
        time.sleep(1)
pyray.close_window()