
import bpy

from bpy.props import (IntProperty, EnumProperty, BoolProperty)
from bpy.types import (AddonPreferences, GizmoGroup, Operator, Gizmo)

from mathutils import Vector, Matrix, Euler
from .constants import PICKERS
from .core.picker import Picker




'''
class RP_OT_simple_operator(bpy.types.Operator):
    """Tooltip"""
    bl_idname = "object.simple_operator"
    bl_label = "Simple Object Operator"


    def invoke(self, context, event):

        context.window_manager.modal_handler_add(self)

        print('Invoke RP_OT_simple_operator')
        bpy.ops.node.rp_box_select('INVOKE_DEFAULT', tweak=True)

        #bpy.ops.node.select_box('INVOKE_DEFAULT', wait_for_input=True, tweak=True)
  
        return {'RUNNING_MODAL'}
    
    def modal(self, context, event):
        print('modal op', event.type, event.value)
                
        return {'RUNNING_MODAL'}

    def execute(self, context):
        print('Select Shape')
        return {'FINISHED'}
'''






class RP_GT_gizmo(Gizmo):

    def test_select(self, context, location):
        ob = context.object

        picker = PICKERS.get(ob)
        if not picker:
            return -1

        picker.move_event(location)

        #if bpy.app.timers.is_registered(tooltip):
        #    bpy.app.timers.unregister(tooltip)
            #context.region.tag_redraw()

        #picker.tooltip_event(event='START')
        #bpy.app.timers.register(partial(tooltip, context.region), first_interval=1)

        #print(location)



        context.region.tag_redraw()

        #print(location)

        return -1

    
    def draw(self, context):
        return
    '''
    def invoke(self, context, event):
        print(f'invoke: type={event.type}, value={event.value}, ctrl={event.ctrl}, shift={event.shift}, alt={event.alt}')
        return {'RUNNING_MODAL'}
    
    def modal(self, context, event, tweak):
        print(f'invoke: type={event.type}, value={event.value}, ctrl={event.ctrl}, shift={event.shift}, alt={event.alt}')
                
        return {'RUNNING_MODAL'}
    
    def exit(self, context, cancel):
        print('EXIT')

        '''
    
    

class RP_GT_gizmogroup(GizmoGroup):
    """ test gizmo button 2d """
    bl_idname = "view3d.gizmo_button_2d"
    bl_label = "Test button 2d"
    bl_space_type = 'NODE_EDITOR'
    bl_region_type = 'WINDOW'
    bl_options = {'PERSISTENT'}
    
    @classmethod
    def poll(cls, context):
        return context.space_data.tree_type == 'RigPickerTree'

    def setup(self, context):
        self.gizmo = self.gizmos.new("RP_GT_gizmo")




classes = (
    RP_GT_gizmo,
    RP_GT_gizmogroup
)

def register():
    for cls in classes:
        bpy.utils.register_class(cls)
    

def unregister():
    
    for cls in reversed(classes):
        bpy.utils.unregister_class(cls)